本文へスキップ
バージョン: 5.0

プロデューサー

このセクションでは、Apache RocketMQにおけるプロデューサーの概念について説明します。メッセージングモデルにおけるプロデューサーの役割、プロデューサー属性と互換性、プロデューサーの使用に関するいくつかの注意点についても説明します。

定義

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

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

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

  • 送信モード:プロデューサーは、API操作でメッセージ送信モードを指定できます。Apache RocketMQは、同期送信と非同期送信をサポートしています。

  • バッチ送信:プロデューサーは、API操作でバッチ送信を指定できます。たとえば、一度に送信するメッセージの数またはサイズを指定できます。

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

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

モデル関係

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

  1. メッセージはプロデューサーによって初期化され、Apache RocketMQサーバーに送信されます。

  2. メッセージは、Apache RocketMQサーバーに到着した順序で、トピックの指定されたキューに格納されます。

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

内部属性

クライアントID

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

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

通信パラメータ

  • (必須):サーバーへの接続に使用されるエンドポイント。このエンドポイントは、クラスタを識別するために使用されます。

    アクセスポイントは、この形式で構成する必要があります。ノードの変更によってホットスポットマイグレーションが失敗するのを防ぐために、IPアドレスを使用するのではなく、ドメイン名を使用することをお勧めします。

  • (オプション):クライアントが認証に使用できる資格情報。

    サーバーでID認識と認証が有効になっている場合のみ、送信が必要です。

  • リクエストタイムアウト(オプション):ネットワークリクエストのタイムアウト期間。パラメータの制限で、値の範囲とデフォルト値の詳細を参照してください。

事前バインドトピックリスト

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

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

    • 非トランザクションメッセージ(オプション):サーバーは、アプリケーションの起動後にチェックを実行する代わりに、プロデューサーの初期化中に、事前バインドトピックリストに基づいて、宛先トピックのアクセス権と有効性をチェックします。非トランザクションメッセージには、事前バインドトピックリスト属性を指定することをお勧めします。

      非トランザクションメッセージに事前バインドトピックリスト属性が指定されていない場合、または宛先トピックが変更された場合、Apache RocketMQは宛先トピックを動的にチェックして識別します。

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

トランザクションチェッカー

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

  • プロデューサーがトランザクションメッセージを送信する場合、トランザクションチェッカーを構成し、事前バインドトピックと組み合わせて使用する必要があります。

送信リトライポリシー

送信リトライポリシーは、メッセージの配信が失敗した場合に、プロデューサーがメッセージの配信を再試行する方法を指定します。詳細については、メッセージ送信のリトライを参照してください。

バージョン互換性

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

使用上の注意

個々のプロセス上のプロデューサーの数を制限することをお勧めします。

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

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

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