JMS キューを使用した次のシナリオを考えてみましょう。キュー Q を持つ JMS ブローカー B と、セッション S1 で作成された MessageConsumer C1 があります。C1 は onMessage() メソッド呼び出し (非同期) でメッセージ M1、M2、M3 を受信し、スレッド T1、T2、T3 を開始して、M1、M2、M3 を (それぞれ) 並列に処理します。T1、T2、T3 のいずれかを完了するのにかかる時間はわかりません。ある時点で、T2 が実行を完了する最初のスレッドになります。セッション S1 がその後すぐに閉じられた場合に M1 と M3 が保持されるように、M2 だけをブローカー B に確認 (またはコミット) することは可能ですか? B を別のセッション S2 と別の消費者 C2 に再配信しますか?
Session.CLIENT_ACK は必要なものではありません。いくつかの JMS 実装の SINGLE_ACK は私が探しているものかもしれませんが、JMS 標準ではありません。おそらく、JMS トランザクションで問題を解決できるでしょうか?