grpc 异步请求,无需等待结果

时间:2021-02-05 19:53:47

标签: netty grpc grpc-java

我有两个 netty java grpc 服务器:ServerAServerB

我的一个请求流如下所示:

  1. 客户端将 rpc 发送到 ServerA
  2. ServerA 使 rpc 异步到 ServerB
  3. 无需等待异步 rpc 的结果,即可完成对 ServerA 的请求。即逻辑只是使异步 rpc 然后完成。

这里会发生什么? ServerA 上正在处理客户端请求的线程是否在使异步 rpc 的线程完成之前等待退出?异步请求是否有可能永远不会通过?或者它可能因为客户不在而出错?

1 个答案:

答案 0 :(得分:0)

gRPC 线程模型与类似 Servlet 的线程模型不同,后者的每个请求都在该请求的生命周期内绑定到一个线程。

gRPC 不考虑示例中的交互,并且会“正常工作”而无需任何线程等待。有一个警告。 io.grpc.Context 用于自动传播截止日期和取消。有了它,gRPC 可以注意到一个 RPC 与另一个相关联,并在初始 RPC 完成时取消异步 RPC。可以使用 Context.fork() 来避免这种情况。