ほとんどの場合期待どおりに機能する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クライアント/サーバーの設定でよくある間違いはありますか?
私がしているもう1つのことは、接続が開いているか、アイドル状態か、接続しているかどうかを確認し、そうであれば接続を再利用することです。それ以外の場合は、リダイヤルします。
grpcは接続を管理し、必要に応じて再接続するため、非常に特別なニーズがない限り、作成後に監視する必要はありません。
「トランスポートが閉じています」には、さまざまな原因が考えられます。 FAQで関連する質問を参照し、それでも質問がある場合はお知らせください: https://github.com/grpc/grpc-go#the-rpc-failed -with-error-code--unavailable-desc--transport-is-closing
私はほぼ同じ問題を抱えていました 今年の初め 。約15分後に、サーバーに接続を切断させました。
機能している私の解決策は、connection
関数で_grpc.Dial
_を使用してmain
を作成し、リクエストごとにpb.NewAppClient(connection)
を作成することでした。 connection
はすでに作成されているため、遅延は問題になりませんでした。リクエストが完了した後、クライアントを閉じました。