21

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

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

谢谢

4

1 回答 1

26

回答第一个问题:

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

回答第二个问题:

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

于 2015-10-19T16:23:14.377 回答