首页 > 解决方案 > 允许客户端优雅地取消流服务的非实验性方法

问题描述

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

另外,如果我决定使用这些类来实现这个功能,我可以假设我会没事,除非我升级 grpc-java 版本?

标签: javagrpc

解决方案


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

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

然后关闭Context将取消RPC:

withCancellation.close();

推荐阅读