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

ApsaraMQ for RocketMQ:プロデューサー

最終更新日:Jul 09, 2024

このトピックでは、ApsaraMQ for RocketMQのプロデューサーの概念について説明します。 また、メッセージングモデルにおけるプロデューサーの役割、プロデューサーの属性と互換性、およびプロデューサーとの作業に関するいくつかの使用法についても説明します。

定義

ApsaraMQ for RocketMQのプロデューサーは、メッセージを作成してサーバーに送信する機能的なメッセージングエンティティです。

プロデューサーは通常、ビジネスシステムに統合され、データをメッセージとしてApsaraMQ for RocketMQにカプセル化し、メッセージをサーバーに送信します。 メッセージの詳細については、「メッセージ」をご参照ください。

プロデューサー側では、次のメッセージ配信要素が定義されています。

  • 送信モード: 作成者はAPI操作でメッセージ送信モードを指定できます。 ApsaraMQ for RocketMQは、同期送信と非同期送信をサポートします。 詳細については、「モデル」をご参照ください。

  • トランザクション動作: ApsaraMQ for RocketMQはトランザクションメッセージをサポートします。 プロデューサーは、トランザクションの最終的な一貫性を確保するためにトランザクションチェックに関与しています。 詳細については、「トランザクションメッセージ」をご参照ください。

プロデューサーとトピックは多対多の関係を持っています。 プロデューサーは複数のトピックにメッセージを送信でき、トピックは複数のプロデューサーからメッセージを受信できます。 この多対多の関係により、パフォーマンススケーリングとディザスタリカバリが容易になります。

Producers and topics

モデル関係

次の図は、ApsaraMQ for RocketMQのメッセージングモデルにおけるプロデューサーの役割を示しています。Producer

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

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

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

内部属性

クライアントID

  • 定義: プロデューサクライアントのID。 この属性は、異なるプロデューサーを区別するために使用されます。 クライアントIDは、クラスター内でグローバルに一意です。

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

通信パラメータ

  • エンドポイント (必須): クライアントがApsaraMQ forRocketMQブローカーにアクセスするために使用するアドレス。 エンドポイントは、ブローカー上のクラスターを識別するために使用されます。

    指定した形式でエンドポイントを設定する必要があります。 ノードの変更中にホットスポットの移行に失敗しないように、IPアドレスではなくドメイン名を使用することを推奨します。

  • ID認証 (オプション): クライアントのIDを検証するために使用される資格情報。

    このパラメーターは、ブローカーでID認証機能が有効になっている場合にのみ必要です。

  • リクエストタイムアウト期間 (オプション): クライアント要求のタイムアウト期間。 リクエストタイムアウト期間パラメーターの有効な値については、「パラメーターの制限」をご参照ください。

Prebound topic list

  • 定義: ApsaraMQ for RocketMQのプロデューサーがメッセージを送信するトピックのリスト。 事前バインドトピックには、次の利点があります。

    • トランザクションメッセージ: トランザクションメッセージには、事前バインドトピックリスト属性を指定する必要があります。 トランザクションメッセージングのシナリオでは、プロデューサーが障害から回復するか再起動すると、プロデューサーはトランザクションメッセージトピックにコミットされていないトランザクションメッセージが含まれているかどうかを確認します。 これにより、プロデューサーが新しいメッセージをトピックに送信した後に、トピック内のコミットされていないトランザクションメッセージによって引き起こされる待ち時間を防ぎます。

    • 非トランザクションメッセージの: サーバーは、アプリケーションの起動後にチェックを実行するのではなく、プロデューサーの初期化中に事前バインドされたトピックのリストに基づいて宛先トピックのアクセス許可と有効性をチェックします。 トランザクション以外のメッセージには、事前バインドトピックリスト属性を指定することを推奨します。

      トランザクション以外のメッセージにプリバウンドトピックリスト属性が指定されていない場合、または宛先トピックが変更されている場合、ApsaraMQ for RocketMQは宛先トピックを動的にチェックおよび識別します。

  • 制限: トランザクションメッセージの場合、事前にバインドされたトピックを指定し、トランザクションチェッカーと一緒に使用する必要があります。

取引チェッカー

  • ApsaraMQ for RocketMQは、トランザクションの最終的な一貫性を確保するために、プロデューサーがトランザクションチェッカーを実装する必要があるトランザクションメッセージングメカニズムを使用します。 詳細については、「トランザクションメッセージ」をご参照ください。

  • プロデューサーがトランザクションメッセージを送信するときは、トランザクションチェッカーを設定し、事前にバインドされたトピックとともに使用する必要があります。

配信再試行ポリシーは、メッセージ配信の試行が失敗したときに、作成者がメッセージの配信を再試行する方法を指定します。 詳細については、「メッセージ送信の再試行」をご参照ください。

互換性

ApsaraMQ for RocketMQバージョン5.x以降、プロデューサーは匿名であり、プロデューサーグループは廃止されます。 Message Queue For Apache RocketMQバージョン3.xおよびバージョン4.xでは、ビジネスに影響を与えることなく、既存のプロデューサーグループを廃止できます。

使用上の注意

個々のプロセスのプロデューサー数を制限することを推奨します。

ApsaraMQ for RocketMQでは、プロデューサーとトピックが多対多のコミュニケーションを提供します。 単一のプロデューサーが複数のトピックにメッセージを送信できます。 ビジネスシナリオに必要な最小数のプロデューサーを作成して初期化し、できるだけ多くのプロデューサーを再利用することをお勧めします。 たとえば、複数のトピックへのメッセージ配信が必要なシナリオでは、トピックごとにプロデューサーを作成する必要はありません。

定期的にプロデューサーを作成して破壊しないことをお勧めします。

ApsaraMQ for RocketMQのプロデューサーは、データベースの接続プールなど、再利用できる基盤となるリソースです。 メッセージを送信するたびにプロデューサーを作成したり、メッセージを送信した後にプロデューサーを破棄したりする必要はありません。 プロデューサーを定期的に作成して破棄すると、ブローカーで多数の短い接続リクエストが生成されます。 これにより、システムに高レベルの負荷がかかります。

  • 正しい使用法の例

    Producer p = ProducerBuilder.build();
      for (int i =0;i<n;i++)
        {
          Message m= MessageBuilder.build();
          p.send(m);
        }
    p.shutdown();
  • 不正な使用の例

    for (int i =0;i<n;i++)
      {
        Producer p = ProducerBuilder.build();
        Message m= MessageBuilder.build();
        p.send(m);
        p.shutdown();
      }