3

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 トランザクションで問題を解決できるでしょうか?

4

1 に答える 1

-1

Messageインターフェイスは、単一メッセージの確認を許可するものを定義しacknowledgeます。message.acknowledgeそのため、T2を呼び出すことができます。

補足として、JMS プロバイダーの実装によっては、onMessage() コールバックが複数のスレッドから既に呼び出されている場合があります。

于 2012-12-14T00:07:20.450 に答える