goを使ってgrpcサーバーを構築しています。現在、サーバーは 3 つのメソッドを提供しています:
datadog を使用して、リクエスト数、期間などのいくつかのメトリクスをログに記録しています。 submitjob メソッドは次のようになります:
リーリーこれら 3 つの異なるサーバー メソッドのログ コードはほぼ同じです。したがって、この重複を回避する方法を知りたいです。
golang grpc にインターセプターの概念があることに気づきました。基本的にはインターセプター関数を定義し、それを使用してサーバー メソッド呼び出しの前後処理を行うことができます。
ドキュメントに従って、次のようにインターセプターを作成しました:
リーリー問題は、インターセプターが呼び出されるたびに、新しい datadog クライアントが作成され、破棄されることです。これは不要だと思います。しかし、unaryinterceptor はクラスではなく単なるメソッドであるため、datadog クライアントを一度作成して後で再利用する方法は見つかりませんか?私のニーズを満たす方法はありますか?
はい、その場で作成せず、別のファイル/パッケージに移動します。datadog.goとします
これをシングルトンとして宣言する必要があるため、すべての使用法でポインターが 1 つだけになります。...
(タイプ「datadogtype」を使用して、関数「newdatadogclient」によって返されるデータタイプを参照します。より正確なサンプルコードを提供するには、パッケージとバージョンを指定してください)
リーリーここで、ユースケースに応じて、ポインタとして返してそれを閉じると、そのポインタのすべての使用が閉じられるため、ポインタ自体を返してそれを閉じる部分を省略するか、値を返します。
のオリジナルのコピーですところで、使用している Datadog のバージョンと特定のパッケージを教えていただけますか?
以上がGolang grpc サーバーメソッドのインターセプターでログクライアントを再利用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。