プロデューサー
このセクションでは、Apache RocketMQにおけるプロデューサーの概念について説明します。メッセージングモデルにおけるプロデューサーの役割、プロデューサー属性と互換性、プロデューサーの使用に関するいくつかの注意点についても説明します。
定義
Apache RocketMQのプロデューサーは、メッセージを作成してサーバーに送信する機能的なメッセージングエンティティです。
プロデューサーは通常、ビジネスシステムに統合され、Apache RocketMQでデータをメッセージとしてカプセル化し、メッセージをサーバーに送信する役割を果たします。メッセージの詳細については、メッセージを参照してください。
プロデューサー側では、次のメッセージ配信要素が定義されています。
- 送信モード:プロデューサーは、API操作でメッセージ送信モードを指定できます。Apache RocketMQは、同期送信と非同期送信をサポートしています。 
- バッチ送信:プロデューサーは、API操作でバッチ送信を指定できます。たとえば、一度に送信するメッセージの数またはサイズを指定できます。 
- トランザクション動作:Apache RocketMQはトランザクションメッセージをサポートしています。プロデューサーはトランザクションチェックに関与し、トランザクションの最終的な整合性を確保します。詳細については、トランザクションメッセージを参照してください。 
プロデューサーとトピックはn対nの関係にあります。プロデューサーは複数のトピックにメッセージを送信でき、トピックは複数のプロデューサーからメッセージを受信できます。この多対多の関係は、パフォーマンスのスケーリングとディザスタリカバリを容易にします。
モデル関係
次の図は、Apache RocketMQのメッセージングモデルにおけるプロデューサーの役割を示しています。
- メッセージはプロデューサーによって初期化され、Apache RocketMQサーバーに送信されます。 
- メッセージは、Apache RocketMQサーバーに到着した順序で、トピックの指定されたキューに格納されます。 
- コンシューマは、指定されたサブスクリプション関係に基づいて、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();
 }