java客户端怎么退出,干净地从客户端关闭GRPC-Java中的所有开放流
如果要从客户端关闭gRPC(服务器端或双向)流,则必须使用程序包io.grpc中的Context.CancellableContext附加rpc调用.
假设你有一个rpc:
service Messaging {
rpc Listen (ListenRequest) returns (stream Message) {}
}
在客户端,您将像这样处理它:
public class Messaging {
private Context.CancellableContext mListenContext;
private MessagingGrpc.MessagingStub getMessagingAsyncStub() {
/* return your async stub */
}
public void listen(final ListenRequest listenRequest, final StreamObserver messageStream) {
Runnable listenRunnable = new Runnable() {
@Override
public void run() {
Messaging.this.getMessagingAsyncStub().listen(listenRequest, messageStream);
}
if (mListenContext != null && !mListenContext.isCancelled()) {
Log.d(TAG, "listen: already listening");
return;
}
mListenContext = Context.current().withCancellation();
mListenContext.run(listenRunnable);
}
public void cancelListen() {
if (mListenContext != null) {
mListenContext.cancel(null);
mListenContext = null;
}
}
}
调用cancelListen()将模拟错误,’CANCELED’,连接将关闭,以及StreamObserver的onError< Message>将使用throwable消息调用messageStream:’CANCELED’.
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)