使用golang gRPC客户端拨打多个IP地址

时间:2018-05-11 13:31:05

标签: go grpc

我有grpc服务器192.168.1.12:8800192.168.1.13:8800,我想使用grpc.Dial与ip list连接,而不是服务器发现,我该怎么办?

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

2 个答案:

答案 0 :(得分:2)

不幸的是,您无法使用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",
    }))),
)

答案 1 :(得分:1)

我为此编写了一个库: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")

注意开头的三斜杠。