gRPCクライアントとサーバーがあり、それらを実行すると正常に実行されているように見えますが、クライアントでサーバーにダイヤルしようとするとエラーが発生します。
"Error": {
"code": 14,
"message": "all SubConns are in TransientFailure"
},
それが何であるかわかりません。私はグーグルで解決策を見つけようとしましたが、成功しませんでした。
何か案は?これが私のサーバーコードです:
lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", cfg.Host, cfg.Port))
if err != nil {
logger.Critical(ctx, "failed to listen: %v", err)
} else {
logger.Info(ctx, "[userserver] running at %s:%d", cfg.Host, cfg.Port)
}
grpcServer := grpc.NewServer()
userServer := userserver.New()
pb.RegisterDomainServer(grpcServer, userServer)
rpcErr := grpcServer.Serve(lis)
if rpcErr != nil {
logger.Critical(ctx, "failed to serve: %v", rpcErr)
}
ところで、ここのサーバーはログを表示します:
2018/02/08 07:03:37.603287情報:[userserver]がlocalhost:3001で実行されています
およびクライアント:
conn, err := grpc.Dial(c.serverAddr, grpc.WithInsecure())
if err != nil {
return err
}
defer conn.Close()
client := pb.NewDomainClient(conn)
_, err = client.Dispatch(ctx, &pb.Command{
Name: command,
Payload: payload,
})
これはポートバフです
service Domain {
rpc Dispatch(Command) returns (Response);
}
message Command {
string name = 1;
bytes payload = 2;
}
message Response {}
サーバーはそのポートをリッスンしていますか?
// Most linux
lsof -i :3001
// OSX
lsof -iTCP -sTCP:LISTEN -P
クライアントを正しいアドレスに接続していますか?
c.serverAddrは「127.0.0.1:3001」である必要があります
このエラーは、サーバーへの接続が何らかの理由でダウンしていることを意味します。
サーバーがlocalhost:3001で実行されていることを印刷していますが、サーバーにそのアドレスでのサービスエラーがあるかどうかは確認しないでください。
サーバーの最後の行を次のように置き換えます。
if err := grpcServer.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
また、サーバー起動時のコンテキストctx
はどこから来ていますか?
私はあなたのプロト定義がそのように見えると思います-そうでなければ他の問題があるかもしれません:
package ...;
service Domain {
rpc Dispatch(Command) returns (...) {}
}
message Command {
... Name
... Payload
}