インターセプター
インターセプターが、多くのRPCメソッドに適用される汎用的な動作を実装するためにどのように使用できるかを説明します。
インターセプター
概要
gRPCサービスを作成する核心は、RPCメソッドを実装することです。しかし、いくつかの機能は実行されるメソッドとは独立しており、すべてまたはほとんどのRPCに適用される必要があります。インターセプターはこのタスクに適しています。
インターセプターを使用するケース
インターセプターの概念にはすでにおなじみかもしれませんが、「フィルター」または「ミドルウェア」と呼ぶことに慣れているかもしれません。インターセプターは、単一のRPCメソッドに固有ではないロジックを実装するのに非常に適しています。また、さまざまなクライアントまたはサーバー間で簡単に共有できます。インターセプターは、gRPCを拡張するための重要かつ頻繁に使用される方法です。必要な機能のいくつかは、より広いgRPCエコシステムでインターセプターとして既に使用可能になっている可能性があります。
インターセプターの使用例をいくつか示します。
- メタデータ処理
- ロギング
- 障害注入
- キャッシング
- メトリクス
- ポリシーの適用
- サーバー側の認証
- サーバー側の認可
注意
クライアント側の認証はインターセプターを介して行うこともできますが、gRPCはタスクに適した専用の「呼び出し資格情報」APIを提供します。クライアント側の認証の詳細については、認証ガイドを参照してください。インターセプターの使用方法
インターセプターは、gRPCチャネルまたはサーバーを構築する際に追加できます。インターセプターは、そのチャネルまたはサーバー上のすべてのRPCに対して呼び出されます。インターセプターのAPIは、クライアント側とサーバー側で異なるため、インターセプターは「クライアントインターセプター」または「サーバーインターセプター」のいずれかになります。
インターセプターは本質的に呼び出しごとに行われます。TCP接続の管理、TCPポートの設定、またはTLSの設定には役立ちません。ほとんどのカスタマイズに適したツールですが、すべてに使用できるわけではありません。
インターセプターの順序
複数のインターセプターを使用する場合、その順序が重要です。gRPCの実装がそれらを実行する順序を必ず理解してください。インターセプターは、アプリケーションとネットワークの間にある行にあると考えると便利です。一部のインターセプターは「ネットワークに近い」場所にあり、送信されるものをより細かく制御でき、他のインターセプターは「アプリケーションに近い」場所にあり、アプリケーションの動作をよりよく把握できます。
キャッシングインターセプターとロギングインターセプターの2つのクライアントインターセプターがあるとします。それらはどのような順序にする必要がありますか?アプリケーションの通信をより適切に監視し、キャッシュされたRPCを無視するために、ロギングインターセプターをネットワークに近づけたい場合があります。
flowchart LR
APP(Application) --> INT1
INT1(Caching\nInterceptor) -->|Cache miss| INT2
INT2(Logging\nInterceptor) --> NET
NET(Network)
または、アプリの動作を理解し、読み込んでいる情報を確認するために、アプリケーションに近づけたい場合があります。
flowchart LR
APP(Application) --> INT2
INT1(Caching\nInterceptor) -->|Cache miss| NET
INT2(Logging\nInterceptor) --> INT1
NET(Network)
インターセプターの順序を変更するだけで、これらのオプションから選択できます。
言語サポート
言語 | 例 |
---|---|
C++ | C++の例 |
Go | Goの例 |
Java | Javaの例 |
Python | Pythonの例 |