如何允许 Java 中的 gRPC Channel 使用多个连接?

Posted

技术标签:

【中文标题】如何允许 Java 中的 gRPC Channel 使用多个连接?【英文标题】:How to allow gRPC Channel in Java to use multiple connections? 【发布时间】:2021-10-02 03:12:21 【问题描述】: io.grpc.Channel 类的

Javadoc 提到,

一个通道可以有零个或多个实际连接到 基于配置、负载等的端点

我的问题是,如何启用这个配置,让 gRPC 的通道在需要时打开多个实际连接?

更新: 根据this Microsoft Doc,只建立了一个TCP连接!

【问题讨论】:

【参考方案1】:

这是默认行为,无需配置。有关 gRPC 最佳实践的一些提示,请参阅 https://grpc.io/docs/guides/performance/,其中简要介绍了通道和 HTTP/2 连接限制。

【讨论】:

这份文件本身对我来说似乎有点混乱!它提到了这两件事 - 每个 gRPC 通道使用 0 个或多个 HTTP/2 连接 - 使用 gRPC 通道池在多个连接上分配 RPC 所以回到同一个问题,谁管理这些多个连接!如果我们,那么我是否必须使用某种 RoundRobin 方式将 RPC 发送到通道,或者如果是 gRPC,那么如何?【参考方案2】:

我认为 grpc-java 或 grpc-go 客户端中没有现成的功能(或配置)。但是,您可以探索 grpc-dotnet 客户端,我认为他们找到了workaround(即使他们不推荐使用)。

谁管理这些多个连接

在 grpc-java 中,通道本身管理 HTTP/2 连接。我们无权访问这些连接(如果我们想配置它们)。

可能有一种可能的解决方法来实现相同的 - “创建多个渠道”。见this

【讨论】:

以上是关于如何允许 Java 中的 gRPC Channel 使用多个连接?的主要内容,如果未能解决你的问题,请参考以下文章

python的gRPC示例

grpc源码分析之域名解析

Python 客户端在 GRPC 存根上返回 CERTIFICATE_VERIFY_FAILED

grpc 客户端 python:如何创建 grpc 客户端连接池以获得更好的吞吐量?

gRPC中的分页

gRPC系列:什么是gRPC API,它如何工作?