gRPC 中的通道/存根是否对线程安全
2022-09-02 03:55:17
当从 Java 使用 gRPC 时,我是否可以缓存存根(客户端)并在多线程环境中调用它们,或者通道是否线程安全并且可以安全地缓存?
如果出现网络中断,我应该重新创建通道,还是它足够智能以重新连接?我无法找到有关 http://www.grpc.io/docs/ 相关信息
谢谢
当从 Java 使用 gRPC 时,我是否可以缓存存根(客户端)并在多线程环境中调用它们,或者通道是否线程安全并且可以安全地缓存?
如果出现网络中断,我应该重新创建通道,还是它足够智能以重新连接?我无法找到有关 http://www.grpc.io/docs/ 相关信息
谢谢
第一个问题的回答:
通道是线程安全的; 用注释标记。存根也是线程安全的,这就是重新配置会创建新的存根的原因。io.grpc.Channel
@ThreadSafe
对第二个问题的回答:
如果出现网络中断,则无需重新创建通道。通道将以指数退避重新连接,大致如连接回退文档所述。Java 不是 100% 符合该算法,因为它不会在以后的重试中增加连接超时。(不要与已实现的指数退避混淆。