我在docker中部署了DgraphAlpha和DgraphZero。我正在按照文档中的描述连接到 Dgraph。
func newClient() *dgo.Dgraph {
d, err := grpc.Dial("localhost:9080", grpc.WithInsecure())
if err != nil {
log.Fatal(err)
}
return dgo.NewDgraphClient(
api.NewDgraphClient(d),
)
}
Run Code Online (Sandbox Code Playgroud)
并且客户端已成功创建,但是当我尝试搜索时
txn := i.dgraphClient.NewReadOnlyTxn()
defer txn.Discard(context.Background())
dgraphQuery := "search here"
response, err := txn.Query(context.Background(), dgraphQuery)
if err != nil {
// error here
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
rpc error: code = Unavailable desc = connection closed before server preface received
Run Code Online (Sandbox Code Playgroud)
这个错误并不总是在意想不到的时刻发生,因此我很难确定其根源。有人遇到过类似的事情吗?可能是什么问题呢?
除了其他暂时性原因之外,导致此错误的一个常见原因是服务器在启用 TLS 的情况下运行,而客户端尝试在不使用 TLS 的情况下进行连接。
确保您在客户端上正确配置了 TLS 选项:
tlsConfig := &tls.Config{
Certificates: []tls.Certificate{myCertificate},
RootCAs: myCAPool,
}
tlsOpt := grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig))
conn, err := grpc.DialContext(ctx, "<connection_string>", tlsOpt)
Run Code Online (Sandbox Code Playgroud)
还要确保您实际上在客户端连接上使用客户端证书。