我有两个 netty java grpc 服务器:ServerA
和 ServerB
。
我的一个请求流如下所示:
ServerA
。ServerA
使 rpc 异步到 ServerB
。ServerA
的请求。即逻辑只是使异步 rpc 然后完成。这里会发生什么? ServerA
上正在处理客户端请求的线程是否在使异步 rpc 的线程完成之前等待退出?异步请求是否有可能永远不会通过?或者它可能因为客户不在而出错?
答案 0 :(得分:0)
gRPC 线程模型与类似 Servlet 的线程模型不同,后者的每个请求都在该请求的生命周期内绑定到一个线程。
gRPC 不考虑示例中的交互,并且会“正常工作”而无需任何线程等待。有一个警告。 io.grpc.Context
用于自动传播截止日期和取消。有了它,gRPC 可以注意到一个 RPC 与另一个相关联,并在初始 RPC 完成时取消异步 RPC。可以使用 Context.fork()
来避免这种情况。