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

时间:2017-02-18 20:44:23

标签: java grpc grpc-java

TL; DR

grpc-java' s ManagedChannel是否有隐式连接池,或者ManagedChannel实例的汇集是否是用户的责任?

所以,我正在使用带有protoc 3.2.0的java grpc 1.1.2。在我看来,grpc为客户端提供的连接池没有隐含的支持(截至目前)。但是,似乎grpc中连接的抽象,即ManagedChannel对象确实适用于多个TCP连接。那是对的吗?如果是这样,ManagedChannel是否带有连接池?如果是这种情况,我可能不必担心连接池,因为该通道是线程安全的,我只能在我的客户端使用单个ManagedChannel实例。但是,如果需要,我可能确实必须汇集这些通道对象以获得更大的吞吐量。是否有这样的实现(通道池)在grpc本身为我做这个?

2 个答案:

答案 0 :(得分:4)

由于您说要集合以获得更高的吞吐量,我假设您要为通道中的一个地址创建和池化多个连接。它不受支持,因为通道impl用于每个地址只创建一个连接。使用即将取代旧版本的LBv2,现在可以使用自定义LoadBalancer,您可以根据需要create尽可能多地Subchannel进行连接。

您可以参考库存pick-firstround-robin LoadBalancers了解如何编写自己的LoadBalancer。

答案 1 :(得分:3)

是的,ManagedChannel执行连接池,您只需要一个。它会在需要时自动创建和销毁连接。

相关问题