web-dev-qa-db-ja.com

gRPC設定に問題があります。断続的なRPC使用不可エラーの取得

ほとんどの場合期待どおりに機能するgrpcサーバーとクライアントがありますが、「トランスポートが閉じています」というエラーが時々発生します。

rpc error: code = Unavailable desc = transport is closing

私の設定に問題があるのか​​と思います。クライアントはかなり基本的です

connection, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
pb.NewAppClient(connection)
defer connection.Close()

そして呼び出しはのようなタイムアウトで行われます

ctx, cancel := context.WithTimeout(ctx, 300*time.Millisecond)
defer cancel()

client.MyGRPCMethod(ctx, params)

私がしているもう1つのことは、接続が開いているか、アイドル状態か、接続しているかどうかを確認し、そうであれば接続を再利用することです。それ以外の場合は、リダイヤルします。

サーバーで特別な設定は行われていません

grpc.NewServer()

私がしている可能性があるgrpcクライアント/サーバーの設定でよくある間違いはありますか?

6
harumphfrog

私がしているもう1つのことは、接続が開いているか、アイドル状態か、接続しているかどうかを確認し、そうであれば接続を再利用することです。それ以外の場合は、リダイヤルします。

grpcは接続を管理し、必要に応じて再接続するため、非常に特別なニーズがない限り、作成後に監視する必要はありません。

「トランスポートが閉じています」には、さまざまな原因が考えられます。 FAQで関連する質問を参照し、それでも質問がある場合はお知らせください: https://github.com/grpc/grpc-go#the-rpc-failed -with-error-code--unavailable-desc--transport-is-closing

2
Doug Fawley

私はほぼ同じ問題を抱えていました 今年の初め 。約15分後に、サーバーに接続を切断させました。

機能している私の解決策は、connection関数で_grpc.Dial_を使用してmainを作成し、リクエストごとにpb.NewAppClient(connection)を作成することでした。 connectionはすでに作成されているため、遅延は問題になりませんでした。リクエストが完了した後、クライアントを閉じました。

1
Varcorb