作者:彭嘉侑舒良 | 来源:互联网 | 2023-02-11 14:08
TL; DR
grpc-java是否ManagedChannel
具有隐式连接池,或者ManagedChannel
实例池由用户负责?
因此,我将Java grpc 1.1.2与协议3.2.0一起使用。在我看来,grpc为客户端提供的连接池没有隐式支持(到目前为止)。但是,似乎在grpc中连接的抽象(即ManagedChannel
对象确实适用于多个TCP连接)。那是对的吗?如果是这样,ManagedChannel
连接池是否附带了它?如果是这样的话,考虑到通道是线程安全的,我可能不必担心连接池,并且我可以ManagedChannel
在整个客户端中使用单个实例。但是,如果需要,我可能确实也必须池化这些通道对象以提高吞吐量。是否有这样的实现(通道池)可以在grpc本身中为我实现?
1> Carl Mastran..:
是的,ManagedChannel进行连接池,您只需要一个即可。它将根据需要自动创建和销毁连接。
我是gRPC的核心撰稿人,对此主题具有权威性。
2> 小智..:
既然您说过要池化以提高吞吐量,所以我假设您想为一个通道中的一个地址创建并池化多个连接。不支持此功能,因为该通道暗示仅用于每个地址创建一个连接。有了即将取代旧版本的LBv2,现在可以使用自定义LoadBalancer,在其中您可以根据需要为连接创建尽可能多的Subchannel
s。
有关如何编写自己的LoadBalancer的信息,请参考优先选择和循环轮询的LoadBalancers。