285.5.4. トランザクションバッチコンシューマーとプロデューサー


SJMS コンポーネントは、Producer エンドポイントと Consumer エンドポイントの両方でローカル JMS トランザクションのバッチをサポートするように設計されています。ただし、それぞれでどのように処理されるかは非常に異なります。

SJMS コンシューマーエンドポイントは、関連付けられたセッションでコミットする前に X メッセージを処理する簡単な実装です。コンシューマーでバッチ処理トランザクションを有効にするには、最初に transacted パラメーターを true に設定し、transactionBatchCount を追加して 0 を超える値に設定します。たとえば、以下の設定では 10 個のメッセージごとにセッションをコミットします。

sjms:queue:transacted.batch.consumer?transacted=true&transactionBatchCount=10

コンシューマーエンドポイントでバッチの処理中に例外が発生すると、セッションロールバックが呼び出され、次の利用可能なコンシューマーにメッセージが再配信されます。また、カウンターは、関連付けられたセッションの BatchTransactionCommitStrategy に対して 0 にリセットされます。JMSRedelivered ヘッダーが true に設定されたメッセージを監視するように、バッチメッセージのプロセッサーにフックを配置することはユーザーの責任です。これは、ある時点でメッセージがロールバックされ、正常な処理が行われたことを示すインジケーターです。

トランザクションバッチコンシューマーは、セッション上でオープントランザクションをコミットする前に、メッセージ間でデフォルトの時間(5000 ミリ秒)を待機する内部タイマーのインスタンスも行います。デフォルト値の 5000ms(最低 1000ms)は、ほとんどのユースケースで十分ですが、さらにチューニングが必要な場合は、transactionBatchTimeout パラメーターを設定するだけで十分です。

sjms:queue:transacted.batch.consumer?transacted=true&transactionBatchCount=10&transactionBatchTimeout=2000

コンテキストスイッチの量によりパフォーマンスに不必要な影響を及ぼすため、許可される最小値は 1000 ミリ秒です。

プロデューサーエンドポイントは処理されますが、異なる方法になります。各メッセージが宛先に配信された後にプロデューサーを使用すると、Exchange が閉じられ、そのメッセージへの参照がなくなりました。再配信ですべてのメッセージを利用可能にするには、BatchMessages を公開するプロデューサーエンドポイントでトランザクションを有効にするだけです。トランザクションは、バッチリスト内のすべてのメッセージが含まれるエクスチェンジの終了時にコミットされます。追加で設定する必要はありません。以下に例を示します。

List<BatchMessage<String>> messages = new ArrayList<BatchMessage<String>>();
for (int i = 1; i <= messageCount; i++) {
    String body = "Hello World " + i;
    BatchMessage<String> message = new BatchMessage<String>(body, null);
    messages.add(message);
}

トランザクションを有効にして List を公開します。

template.sendBody("sjms:queue:batch.queue?transacted=true", messages);
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る