如何强制我的 gRPC 客户端打开到服务器的多个连接?

How do I force my gRPC client to open multiple connections to the server?

我已经使用 Google 的 gRPC 工具包实现了服务器和客户端。在测试时,我注意到从客户端到服务器的 TCP 连接永远不会超过一个,无论我构造了多少 Channel 个实例。

我打算通过 HAProxy 使用 Google 所谓的“proxy load balancing”。因此,我需要从我的客户端(比如服务 A)到我的服务器(比如服务 B)的多个连接。如果创建的连接不超过一个,那么 HAProxy 会为该连接选择一项服务,并且 none 的其他服务器将永远看到任何负载。

我曾尝试在客户端和服务器端(以及同时在两侧)使用 ChannelOptions.MaxConcurrentStreams,但没有成功。如前所述,我创建了多个 Channel 实例,但无济于事。我发现的唯一有效技术是创建多个进程,出于显而易见的原因,这并不理想。

如何才能完全启用 Google 的 "proxy load balancing" 方案?

目前,没有直接的方法来强制与我们现有的 API 创建新的连接。正如我在评论中提到的,这可以通过我们的 C-Core 实现(由 gRPC C# 包装)来完成,只需提供不同的 ChannelArgs,代表连接的参数,并在存在时确保单独的连接为每组不同的 ChannelArgs 创建。但是,仅使用不同的通道参数来获取同一连接的新副本并不是 API 的预期用例,因此没有真正无意义的通道参数除了确保建立新连接外什么都不改变。

但是,有一个 in-progress PR 添加了一个通道参数,明确强制子通道(连接)共享仅发生在单个通道实例中。设置后,这将避免在通道实例之间共享连接,并允许您确保每个通道创建一个新连接。