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

问题描述

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

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

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

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

解决方法

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

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