gRPC 中的通道/存根是线程安全的吗

Posted

技术标签:

【中文标题】gRPC 中的通道/存根是线程安全的吗【英文标题】:Are channel/stubs in gRPC thread-safe 【发布时间】:2016-01-16 19:28:40 【问题描述】:

从 Java 中使用 gRPC 时,我可以缓存存根(客户端)并在多线程环境中调用它们,还是通道是线程安全的并且可以安全缓存?

如果出现网络中断,我应该重新创建通道还是它足够智能重新连接?我在http://www.grpc.io/docs/上找不到相关信息

谢谢

【问题讨论】:

【参考方案1】:

第一个问题的答案:

通道是线程安全的; io.grpc.Channel 标有 @ThreadSafe 注释。存根也是线程安全的,这就是重新配置创建新存根的原因。

第二个问题的答案:

如果出现网络中断,您无需重新创建频道。通道将通过指数退避重新连接,大致如connection backoff 文档所述。 Java 并非 100% 符合该算法,因为它不会在以后的重试中增加连接超时。 (不要与已实现的指数退避相混淆。)

【讨论】:

以上是关于gRPC 中的通道/存根是线程安全的吗的主要内容,如果未能解决你的问题,请参考以下文章

Spring框架中的Bean是线程安全的吗?如果线程不安全,要如何处理?

java中的++i是线程安全的吗?

Spring 中的bean 是线程安全的吗?

Java 中的 volatile int 是线程安全的吗?

Spring框架中的单例bean是线程安全的吗?

Spring框架中的单例bean是线程安全的吗?