すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RocketMQ:消費者

最終更新日:Jul 09, 2024

このトピックでは、ApsaraMQ for RocketMQのコンシューマーの定義、モデル関係、内部属性、および動作の制約について説明します。 このトピックでは、消費者向けのバージョン互換性情報と使用法メモも提供します。

定義

コンシューマーは、ApsaraMQ for RocketMQでメッセージを受信および処理するエンティティです。

消費者は通常、ビジネスシステムに統合されています。 ApsaraMQ for RocketMQブローカーからメッセージを取得し、ビジネスロジックで認識および処理できる情報に変換します。

次の項目は、消費者の行動を決定します。

  • 消費者ID: 行動設定と消費ステータスを取得するには、消費者を消費者グループに関連付ける必要があります。

  • コンシューマータイプ: ApsaraMQ for RocketMQは、プッシュコンシューマーやシンプルコンシューマーなど、さまざまな開発シナリオに対応するさまざまなコンシューマータイプを提供します。 詳細については、「コンシューマータイプ」をご参照ください。

  • コンシューマのローカル設定: これらの設定は、コンシューマタイプに基づいてコンシューマクライアントの実行方法を指定します。 たとえば、コンシューマーのスレッド数と同時実行設定を構成して、さまざまな伝送効果を実現できます。

モデル関係

次の図は、コンシューマーがApsaraMQ for RocketMQのドメインモデルにどのように配置されているかを示しています。Consumers

  1. プロデューサーはメッセージを生成し、ApsaraMQ for RocketMQブローカーに送信します。

  2. ApsaraMQ for RocketMQブローカーは、トピックで指定されたキューにメッセージを受信順に格納します。

  3. コンシューマーは、指定されたサブスクリプションに基づいて、ApsaraMQ for RocketMQブローカーからメッセージを取得して消費します。

内部属性

消費者グループ名

  • 定義: 現在のコンシューマーに関連付けられているコンシューマーグループの名前。 消費者は自分の行動を消費者グループから継承します。 詳細については、「コンシューマーグループ」をご参照ください。

  • 値: コンシューマーグループは、ApsaraMQ for RocketMQの論理リソースです。 コンソールを使用するか、事前にAPI操作を呼び出して、コンシューマーグループを作成する必要があります。 この操作の制限の詳細については、「クォータと制限」をご参照ください。

クライアントID

  • 定義: 消費者クライアントのID。 この属性は、異なる消費者を区別するために使用される。 値はクラスター内で一意である必要があります。

  • 値: クライアントIDは、ApsaraMQ for RocketMQ SDKによって自動的に生成されます。 主に、ログの表示や問題の特定などのO&M目的で使用されます。 クライアントIDは変更できません。

通信パラメータ

事前バインド済みサブスクリプションリスト

  • Definition: 指定されたコンシューマーのサブスクリプションリスト。

    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();
      }