ホームページ  >  記事  >  バックエンド開発  >  Golang grpc サーバーメソッドのインターセプターでログクライアントを再利用する

Golang grpc サーバーメソッドのインターセプターでログクライアントを再利用する

PHPz
PHPz転載
2024-02-06 09:03:12400ブラウズ

在 Golang grpc 服务器方法的拦截器中重用日志客户端

質問内容

goを使ってgrpcサーバーを構築しています。現在、サーバーは 3 つのメソッドを提供しています:

  • 宿題を提出する
  • ジョブをキャンセル
  • ジョブステータスの取得

datadog を使用して、リクエスト数、期間などのいくつかのメトリクスをログに記録しています。 submitjob メソッドは次のようになります:

リーリー

これら 3 つの異なるサーバー メソッドのログ コードはほぼ同じです。したがって、この重複を回避する方法を知りたいです。

golang grpc にインターセプターの概念があることに気づきました。基本的にはインターセプター関数を定義し、それを使用してサーバー メソッド呼び出しの前後処理を行うことができます。

ドキュメントに従って、次のようにインターセプターを作成しました:

リーリー

問題は、インターセプターが呼び出されるたびに、新しい datadog クライアントが作成され、破棄されることです。これは不要だと思います。しかし、unaryinterceptor はクラスではなく単なるメソッドであるため、datadog クライアントを一度作成して後で再利用する方法は見つかりませんか?私のニーズを満たす方法はありますか?


正解


はい、その場で作成せず、別のファイル/パッケージに移動します。datadog.goとします

これをシングルトンとして宣言する必要があるため、すべての使用法でポインターが 1 つだけになります。...

(タイプ「datadogtype」を使用して、関数「newdatadogclient」によって返されるデータタイプを参照します。より正確なサンプルコードを提供するには、パッケージとバージョンを指定してください)

リーリー

ここで、ユースケースに応じて、ポインタとして返してそれを閉じると、そのポインタのすべての使用が閉じられるため、ポインタ自体を返してそれを閉じる部分を省略するか、値を返します。

のオリジナルのコピーです

ところで、使用している Datadog のバージョンと特定のパッケージを教えていただけますか?

以上がGolang grpc サーバーメソッドのインターセプターでログクライアントを再利用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。