允许客户端正常取消流服务的非实验性方法

时间:2018-10-03 19:58:16

标签: java grpc

既然所有StreamObserver(CallStreamObserver,ServerCallStreamObserver)类都标记为实验性https://github.com/grpc/grpc-java/issues/1788,那么允许客户端通过发信号通知服务器停止发送消息来优雅地取消流服务的稳定方法是什么?

此外,如果我决定使用这些类来实现此功能,是否可以假设除非升级grpc-java版本,否则我会很好吗?

1 个答案:

答案 0 :(得分:1)

您始终可以在存根返回的onError()上调用StreamObserver。对于存根未返回StreamObserver的服务器流式RPC,可以在Context内启动RPC。

CancellableContext withCancellation = Context.current().withCancellation();
Context prevCtx = withCancellation.attach();
try {
  stub.foo(request, responseObserver);
} finally {
  withCancellation.detach(prevCtx);
}

然后关闭Context将取消RPC:

withCancellation.close();