如何解决grpc 异步请求,无需等待结果
我有两个 netty java grpc 服务器:ServerA
和 ServerB
。
我的一个请求流如下所示:
- 客户端将 rpc 发送到
ServerA
。 -
ServerA
使 rpc 异步到ServerB
。 - 无需等待异步 rpc 的结果,即可完成对
ServerA
的请求。即逻辑只是使异步 rpc 然后完成。
这里会发生什么? ServerA
上正在处理客户端请求的线程是否在使异步 rpc 的线程完成之前等待退出?异步请求是否有可能永远不会通过?或者它可能因为客户不在而出错?
解决方法
gRPC 线程模型与类似 Servlet 的线程模型不同,后者的每个请求都在该请求的生命周期内绑定到一个线程。
gRPC 不考虑示例中的交互,并且会“正常工作”而无需任何线程等待。有一个警告。 io.grpc.Context
用于自动传播截止日期和取消。有了它,gRPC 可以注意到一个 RPC 与另一个相关联,并在初始 RPC 完成时取消异步 RPC。可以使用 Context.fork()
来避免这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。