Java で MQ キューからメッセージを読み取ろうとしていますが、例外を処理するときにロールバックするときの流れについて少し混乱しています。
ループで実行され、メッセージを探すリーダー クラスがあります。リーダーを初期化すると、接続とセッションが作成されます。次に、ループ内でメッセージを読み取るときが来ると、MQQueue
andが作成されますMQQueueReceiver
。これは正常に機能し、JMSMessage をキューから取得し、それを別のスレッドに渡して作業します。ワーカー スレッドが失敗した場合は、そのメッセージをキューに戻したい (クラスター内の他のノードによって再試行されるようにするため)。
私の質問は、どのようにロールバックするのですか? クラスにrollback()
メソッドがあることに気付きました。MQQueueSession
しかし、すべてのメッセージに同じセッションを再利用しています。同じセッションを何度も再利用するのではなく、メッセージごとに新しいセッションを作成する必要があることを理解する必要がありますか?
これは私にとって直感に反しています。
また、セッションは で作成されconnection.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
ます。以外の別のフラグを使用する必要がありCLIENT_ACKNOWLEDGE
ますか?