1

複数のキューからの jms メッセージを同時に消費したい。すべてのメッセージは、長時間実行された処理の後に DB に移動する必要があり、それらを失う権利はありません。

質問:将来の確認のためにメッセージを保存しoldMessage.acknowledge()、別のメッセージが処理されているときに呼び出すことはできますか?

onMessage(...)私の最初の推測では、これは jms 処理ユニットの奥深くにあり、メソッド内でメッセージと確認応答を処理する必要があるため、これは不可能であるということです。

2 番目の推測は、onMessage() を同時に分割し、多くのメッセージを長時間処理できるようにすることです。しかし、すべてのメッセージが順番どおりに送信されるようにする必要があるため、これは適切なオプションではありません。
2 番目の質問:並行処理中に受注を確実にする方法はありますか?

4

1 に答える 1

0

1: JMS にはセッションに *CLIENT_ACKNOWLEDGE*というフラグがあります。ここで確認できます。私はそれを使用したことはありませんが、あなたが望むことをするようです。

2:

2.1:同じキューに N 個のコンシューマーがある:一部の実装でサポートされている排他的コンシューマーを調べることができます。(AtiveMQ の場合:こちら)。

2.2キューごとに 1 つのコンシューマがありますが、すべてのキューからすべてのメッセージを並べ替えたいとします。順序付けされた SlackBuffer の概念を使用できます。

次のような別の可能性を探ることができます。すべてのメッセージを、メッセージの順序を維持する出力キューにリダイレクトすると、その単一の出力キューからのメッセージのみが消費されます。メッセージの順序とリダイレクトは、MQ サーバーによって行われます。MQ サーバーを制御できる場合にのみ有効な考えです。

これが役立つことを願っています

于 2013-04-16T06:22:49.277 に答える