当使用Java中的gRPC时,我可以缓存存根(客户端)并在多线程环境中调用它们,还是通道线程安全且可以安全地缓存?
如果网络中断,我应该重新创建频道还是足够聪明才能重新连接?我找不到相关信息 http://www.grpc.io/docs/
谢谢
当使用Java中的gRPC时,我可以缓存存根(客户端)并在多线程环境中调用它们,还是通道线程安全且可以安全地缓存?
如果网络中断,我应该重新创建频道还是足够聪明才能重新连接?我找不到相关信息 http://www.grpc.io/docs/
谢谢
回答第一个问题:
通道是线程安全的; io.grpc.Channel
标有 @ThreadSafe
注解。存根也是线程安全的,这就是重新配置创建新存根的原因。
回答第二个问题:
如果存在网络中断,则无需重新创建通道。该通道将重新连接指数退避,大致如下所述 连接退避 文档。 Java不会100%符合该算法,因为它不会在以后的重试中增加连接超时。 (不要与实现的指数退避混淆。)
作为一个小小的“问题”,当创建频道时,Netty当前(v0.9.0)的DNS解析发生,并且以后不会重新执行。下一个版本不应该有这个问题。