2016-04-06 6 views
0

私はJMSメッセージが不変であることを知っています。しかし、私は課題を解決する必要があります。エンティティIDでキューにメッセージを書き換える必要があります。たぶん、システム設計に問題がある、私を助けてください。JMS書き換えメッセージ

アプリケーションAは(エンティティID = 1の)メッセージをJMSに送信します。 App Bは毎分新しいメッセージをチェックします。

アプリケーションAは、1分でエンティティID = 1のメッセージを多数送信することがありますが、App Bは最後のメッセージだけを表示する必要があります。

可能ですか?

  • App Aは新しいメッセージプッシュの前にremoveMatchingMessages(文字列セレクタ)を実行することはできません。

答えて

0

IMOのアプローチに欠陥があります。

新しいメッセージを書き込む前に、メッセージセレクタを使用してエンティティID = 1のすべてのメッセージを削除してキューをクリアしても、タイミングが問題になります。新しいメッセージが書き込まれる前に完了する必要があります、いくつかのレベルの同期。

私が考えることができるもう一つの解決策は、メッセージを処理する前にすべてのメッセージを読むことです。毎分、スレッドはメッセージを受け取り、それらをバケット化します。以前のエンティティid = 1のメッセージは後のエンティティに置き換えられるため、処理するメッセージは一意になります。その後、それらを処理します。もちろん、一度にたくさんのメッセージをメモリに入れて、トランザクション性を窓から投げ捨てることもできますが、それはあなたが望むものを達成するかもしれません。

この場合、実際にメッセージが入ってきて、それらをバケット化していて、1分後に処理ロジックを実行することができます。

。新しいメッセージが来るよう、彼らがあなたの下から変更されないので、あなたのバケツを同期していることを確認します。しかし、

を仕事に行くの全体的な、わかりません