我有grpc服务器192.168.1.12:8800
和192.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
答案 0 :(得分:2)
不幸的是,您无法使用grpc.Dial(...)
传递多个IP地址,只需要一个参数。
可以找到您需要编写的解析器示例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")
注意开头的三斜杠。