java - 允许客户端优雅地取消流服务的非实验性方法
问题描述
由于所有 StreamObserver (CallStreamObserver, ServerCallStreamObserver) 类都被标记为实验性https://github.com/grpc/grpc-java/issues/1788,什么是允许客户端通过向服务器发出信号来优雅地取消流服务的稳定方法停止发送消息?
另外,如果我决定使用这些类来实现这个功能,我可以假设我会没事,除非我升级 grpc-java 版本?
解决方案
您始终可以调用存根返回的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();
推荐阅读
- spring-security-oauth2 - 将 IBM AppId 与 Spring Boot 一起使用时出现 401 UNAUTHORIZED 错误
- java - Android变量取决于时间
- java - 为什么通过 SMTP 使用凭据连接不执行身份验证?
- database - 迁移后在 laravel DB 中看不到新字段
- python - 计算时差并仅显示分钟 - 系列错误
- android - 软键盘覆盖了android中的底部工作表对话框
- asp.net - 在 ASP.NET MVC 中将大型 JSON 或 HTML 内容流式传输到浏览器的缺点
- python - 使用 goslate 进行 Python 翻译
- javascript - jQuery:垂直产品库插件 - FancyBox 问题
- prometheus - kube-prometheus 中的 Alertmanager 电子邮件设置