コンシューマ
このセクションでは、Apache RocketMQ のコンシューマの定義、モデル間の関係、内部属性、および動作上の制約について説明します。このトピックでは、コンシューマのバージョン互換性情報と使用方法に関する注意事項も提供します。
定義
コンシューマとは、Apache RocketMQ でメッセージを受信して処理するエンティティです。
コンシューマは通常、ビジネスシステムに統合されています。Apache RocketMQ ブローカからメッセージを取得し、ビジネスロジックで認識および処理できる情報に変換します。
コンシューマの動作は、次の項目によって決まります。
コンシューマのID:コンシューマは、動作設定と消費状況を取得するために、コンシューマグループに関連付けられている必要があります。
コンシューマの種類:Apache RocketMQ は、プッシュコンシューマ、シンプルコンシューマ、プルコンシューマなど、さまざまな開発シナリオに対応したさまざまな種類のコンシューマを提供しています。詳細については、「コンシューマの種類」を参照してください。
コンシューマのローカル設定:これらの設定は、コンシューマの種類に基づいて、コンシューマクライアントがどのように実行されるかを指定します。たとえば、コンシューマのスレッド数と同時実行設定を構成して、さまざまな伝送効果を実現できます。
モデル間の関係
次の図は、Apache RocketMQ のドメインモデルにおけるコンシューマの位置を示しています。
メッセージは、プロデューサーによって初期化され、Apache RocketMQ サーバに送信されます。
メッセージは、Apache RocketMQ サーバに到着した順序で、トピックの指定されたキューに保存されます。
コンシューマは、指定されたサブスクリプション関係に基づいて、Apache RocketMQ サーバからメッセージを取得して消費します。
内部属性
コンシューマグループ名
定義:現在のコンシューマに関連付けられているコンシューマグループの名前。コンシューマは、コンシューマグループから動作を継承します。詳細については、「コンシューマグループ」を参照してください。
値:コンシューマグループは、Apache RocketMQ{#product-name}の論理リソースです。
。コンソールを使用するか、事前にAPI操作を呼び出すことによって、コンシューマグループを作成する必要があります。この操作の制限については、「パラメータの制限」を参照してください。
クライアントID
定義:コンシューマクライアントのID。この属性は、さまざまなコンシューマを区別するために使用されます。クラスタ内では一意である必要があります。
値:クライアントIDは、Apache RocketMQ SDKによって自動的に生成されます。ログの閲覧や問題の特定などの運用保守目的で使用されます。クライアントIDは変更できません。
通信パラメータ
エンドポイント **(必須)**:サーバへの接続に使用されるエンドポイント。このエンドポイントを使用して、クラスタを識別します。
アクセスポイントは、この形式で構成する必要があります。ノードの変更によってホットスポットの移行に失敗することを防ぐために、IPアドレスを使用する代わりにドメイン名を使用することをお勧めします。
クレデンシャル **(オプション)**:クライアントが認証に使用できるクレデンシャル。
サーバでID認識と認証が有効になっている場合にのみ、伝送が必要です。
- リクエストタイムアウト **(オプション)**:ネットワークリクエストのタイムアウト期間。値の範囲とデフォルト値については、「パラメータの制限」を参照してください。
事前バインドされたサブスクリプションリスト
定義:指定されたコンシューマのサブスクリプションリスト。Apache RocketMQ ブローカは、アプリケーションの起動後ではなく、コンシューマの初期化中に、事前バインドされたサブスクリプションリストを使用して、サブスクライブされたトピックの権限と有効性を検証できます。
値:コンシューマの初期化中に、サブスクリプションまたはサブスクライブされたトピックのリストを指定することをお勧めします。サブスクリプションが指定されていない場合、またはサブスクライブされたトピックが変更された場合、Apache RocketMQ はトピックを動的に検証します。
メッセージリスナ
定義:Apache RocketMQ ブローカがコンシューマにメッセージをプッシュした後、コンシューマがメッセージ消費ロジックを呼び出すために使用するリスナ。
値:メッセージリスナの値は、コンシューマクライアントで構成されます。
制約:プッシュコンシューマとしてメッセージを消費する場合、コンシューマクライアントでメッセージリスナを構成する必要があります。コンシューマの種類の詳細については、「コンシューマの種類」を参照してください。
動作上の制約
Apache RocketMQ のドメインモデルでは、コンシューマの管理はコンシューマグループを通じて実装され、同じグループ内のコンシューマはメッセージを共有して消費します。したがって、グループ内のメッセージの通常のロードと消費を確保するために、Apache RocketMQ は、同じグループ内のすべてのコンシューマが次の消費動作を一致させることを要求します。
配信順序
消費の再試行ポリシー
バージョン互換性
動作上の制約で説明したように、同じグループ内のすべてのコンシューマの配信順序と消費の再試行ポリシーは一致する必要があります。
Apache RocketMQ サーババージョン 5.x:前のコンシューマの消費動作は、関連付けられたコンシューマグループから取得されます。したがって、同じグループ内のすべてのコンシューマの消費動作は一致する必要があり、クライアントはそれに注意する必要はありません。
Apache RocketMQ サーババージョン 3.x/4.x 履歴:前の消費ロジックは、コンシューマクライアントインターフェースによって定義されます。したがって、コンシューマクライアントを設定する際には、同じグループ内のコンシューマの消費動作が一致していることを確認する必要があります。
Apache RocketMQ サーババージョン 5.x を使用していて、クライアントが以前のバージョンの SDK を使用している場合、コンシューマの消費ロジックはコンシューマクライアントインターフェースの設定に従います。
使用方法に関する注意事項
個々のプロセスでのコンシューマの数を制限することをお勧めします。
Apache RocketMQ のコンシューマは、通信プロトコルレベルでノンブロッキング伝送モードをサポートしています。ノンブロッキング伝送モードは、より高い通信効率を持ち、複数スレッドによる同時アクセスをサポートしています。したがって、ほとんどのシナリオでは、単一のプロセスでコンシューマグループに対して1つのコンシューマのみを初期化する必要があります。開発段階で、同じ構成を持つ複数のコンシューマを初期化することは避けてください。
コンシューマを定期的に作成および破棄しないことをお勧めします。
Apache RocketMQ のコンシューマは、データベースの接続プールのように、再利用できる基盤となるリソースです。メッセージを受信するたびにコンシューマを作成したり、メッセージを消費した後にコンシューマを破棄したりする必要はありません。コンシューマを定期的に作成および破棄すると、ブローカ上に多数の短い接続要求が生成されます。これは、システムに高い負荷を与えます。
正しい例
Consumer c = ConsumerBuilder.build();
for (int i =0;i<n;i++)
{
Message m= c.receive();
//process message
}
c.shutdown();
間違った例
for (int i =0;i<n;i++)
{
Consumer c = ConsumerBuilder.build();
Message m= c.receive();
//process message
c.shutdown();
}