【问题标题】:Dial multiple IP addresses with golang gRPC client使用 golang gRPC 客户端拨打多个 IP 地址
【发布时间】:2018-05-11 13:31:05
【问题描述】:

我有grpc服务器192.168.1.12:8800192.168.1.13:8800,我想用grpc.Dial和ip列表连接它们,而不是服务器发现,我该怎么办?

conn, err = grpc.Dial("192.168.1.12:8800,192.168.1.13:8800", grpc.WithInsecure())

有错误

rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = \"transport: Error while dialing dial tcp: too many colons in address 192.168.1.12:8800,192.168.1.13:8800

【问题讨论】:

  • 你试过什么?你遇到了什么问题?包括您的代码,以及您收到的任何输出或错误。

标签: go grpc


【解决方案1】:

很遗憾,您无法使用grpc.Dial(...) 传递多个 IP 地址,它只需要一个参数。

Go 中的 gRPC 确实有一个 "experimental" load balancer api,您应该可以利用它。

可以在here 找到您需要编写的解析器示例。它创建了一个假解析器,将在多个 IP 地址之间进行负载平衡。

因此,一旦您有了这样的解析器,您想要的代码将如下所示:

conn, err := grpc.Dial(
    "",
    grpc.WithInsecure(),
    grpc.WithBalancer(grpc.RoundRobin(resolver.NewPseudoResolver([]string{
        "10.0.0.1:10000",
        "10.0.0.2:10000",
    }))),
)

【讨论】:

  • 这正是我所需要的!终生答案!
【解决方案2】:

我为此写了一个库:https://github.com/Jille/grpc-multi-resolver

使用简单:

import _ "github.com/Jille/grpc-multi-resolver"

grpc.Dial("multi:///192.168.1.12:8800,192.168.1.13:8800")

注意开头的三斜杠。

【讨论】:

    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2021-11-15
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多