我是否需要为多线程Java GRPC(1.1.2)客户端池ManagedChannel实例?

gra*_*tii 4 java grpc grpc-java

TL; DR

grpc-java是否ManagedChannel具有隐式连接池,或者ManagedChannel实例池由用户负责?


因此,我将Java grpc 1.1.2与协议3.2.0一起使用。在我看来,grpc为客户端提供的连接池没有隐式支持(到目前为止)。但是,似乎在grpc中连接的抽象(即ManagedChannel对象确实适用于多个TCP连接)。那是对的吗?如果是这样,ManagedChannel连接池是否附带了它?如果是这样的话,考虑到通道是线程安全的,我可能不必担心连接池,并且我可以ManagedChannel在整个客户端中使用单个实例。但是,如果需要,我可能确实也必须池化这些通道对象以提高吞吐量。是否有这样的实现(通道池)可以在grpc本身中为我实现?

Car*_*elo 7

是的,ManagedChannel进行连接池,您只需要一个即可。它将根据需要自动创建和销毁连接。

  • 我是gRPC的核心撰稿人,对此主题具有权威性。 (2认同)
  • @CarlMastrangelo:嘿,你的说法似乎与埃里克的说法不同。请参阅他的评论/sf/ask/4113542401/ (2认同)

小智 5

既然您说过要池化以提高吞吐量,所以我假设您想为一个通道中的一个地址创建并池化多个连接。不支持此功能,因为该通道暗示仅用于每个地址创建一个连接。有了即将取代旧版本的LBv2,现在可以使用自定义LoadBalancer,在其中您可以根据需要为连接创建尽可能多的Subchannels。

有关如何编写自己的LoadBalancer的信息,请参考优先选择循环轮询的LoadBalancers。