このトピックでは、ApsaraMQ for RocketMQのコンシューマーの定義、モデル関係、内部属性、および動作の制約について説明します。 このトピックでは、消費者向けのバージョン互換性情報と使用法メモも提供します。
定義
コンシューマーは、ApsaraMQ for RocketMQでメッセージを受信および処理するエンティティです。
消費者は通常、ビジネスシステムに統合されています。 ApsaraMQ for RocketMQブローカーからメッセージを取得し、ビジネスロジックで認識および処理できる情報に変換します。
次の項目は、消費者の行動を決定します。
消費者ID: 行動設定と消費ステータスを取得するには、消費者を消費者グループに関連付ける必要があります。
コンシューマータイプ: ApsaraMQ for RocketMQは、プッシュコンシューマーやシンプルコンシューマーなど、さまざまな開発シナリオに対応するさまざまなコンシューマータイプを提供します。 詳細については、「コンシューマータイプ」をご参照ください。
コンシューマのローカル設定: これらの設定は、コンシューマタイプに基づいてコンシューマクライアントの実行方法を指定します。 たとえば、コンシューマーのスレッド数と同時実行設定を構成して、さまざまな伝送効果を実現できます。
モデル関係
次の図は、コンシューマーがApsaraMQ for RocketMQのドメインモデルにどのように配置されているかを示しています。
プロデューサーはメッセージを生成し、ApsaraMQ for RocketMQブローカーに送信します。
ApsaraMQ for RocketMQブローカーは、トピックで指定されたキューにメッセージを受信順に格納します。
コンシューマーは、指定されたサブスクリプションに基づいて、ApsaraMQ for RocketMQブローカーからメッセージを取得して消費します。
内部属性
通信パラメータ
消費ロジックの制限
ApsaraMQ for RocketMQのドメインモデルでは、コンシューマはコンシューマグループで管理されます。 同じコンシューマグループ内のコンシューマは、グループに配信されるすべてのメッセージを共有します。 ApsaraMQ for RocketMQのコンシューマーグループでメッセージが期待どおりに読み込まれ、消費されるようにするには、グループ内のすべてのコンシューマーに対して以下の消費ロジックが一貫している必要があります。
メッセージ配信順序
消費再試行ポリシー
バージョンの互換性
メッセージ配信順序と消費再試行ポリシーは、消費者グループ内のすべての消費者に対して一貫している必要があります。 以下の項目では、ApsaraMQ forRocketMQブローカーのさまざまなバージョンで一貫性を確保する方法について説明します。
ApsaraMQ for RocketMQ 5.xブローカー: コンシューマは、コンシューマが関連付けられているコンシューマグループからメッセージ配信の注文と消費の再試行ポリシーを取得します。 消費ロジックはすべての消費者に対して同じです。 クライアントでメッセージの配信順序や再利用ポリシーを指定する必要はありません。
ApsaraMQ for RocketMQ 3.xおよび4.xブローカー: メッセージ配信の順序と消費の再試行ポリシーは、クライアントのAPI操作によって定義されます。 コンシューマーグループ内のすべてのコンシューマーの消費ロジックが同じであることを確認するには、クライアントでメッセージ配信の順序と消費の再試行ポリシーを指定する必要があります。
以前のバージョンのSDKを使用してApsaraMQ for RocketMQ 5.xブローカーにアクセスする場合、コンシューマーの消費ロジックはコンシューマークライアントのAPI操作の設定によって決まります。
使用上の注意
個々のプロセスの消費者数を制限することを推奨します。
ApsaraMQ for RocketMQのコンシューマは、通信プロトコルレベルでノンブロッキング送信モードをサポートしています。 ノンブロッキング送信モードは、より高い通信効率を有し、複数のスレッドによる同時アクセスをサポートする。 したがって、ほとんどのシナリオでは、1つのプロセスでコンシューマグループに対して1つのコンシューマを初期化するだけで済みます。 開発段階で同じ構成で複数のコンシューマを初期化しないでください。
定期的にコンシューマーを作成して破壊しないことをお勧めします。
ApsaraMQ for RocketMQのコンシューマーは、データベースの接続プールなど、再利用できる基盤となるリソースです。 メッセージを受信するたびにコンシューマーを作成したり、メッセージを消費した後にコンシューマーを破棄したりする必要はありません。 定期的にコンシューマーを作成して破壊すると、ブローカーで多数の短い接続リクエストが生成されます。 これにより、システムに高レベルの負荷がかかります。
正しい例
Consumer c = ConsumerBuilder.build(); for (int i =0;i<n;i++) { Message m= c.receive(); //process message } c.shutdown();(int i =0;i<n;i ++) の誤った例
for (int i =0;i<n;i++) { Consumer c = ConsumerBuilder.build(); Message m= c.receive(); //process message c.shutdown(); }