web-dev-qa-db-ja.com

gRPCクライアント-サーバーを正しく設定する方法

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 {}
7
vardius

サーバーはそのポートをリッスンしていますか?

// Most linux 
lsof -i :3001

// OSX
lsof -iTCP -sTCP:LISTEN -P

クライアントを正しいアドレスに接続していますか?

c.serverAddrは「127.0.0.1:3001」である必要があります

0

このエラーは、サーバーへの接続が何らかの理由でダウンしていることを意味します。

サーバーが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    
}
0
Kevin Sandow