このアプリケーションでは、JMSトピックからメッセージを受信します。
- まず、JMSがFIFOポリシーに従っているかどうかを知りたいです。そうでない場合、アプリケーションはどのようにして最新のメッセージを判別できますか?
メッセージはトランザクションがコミット/終了するまでJMSサーバーに保持されるため、メッセージを消費します(永続サブスクライバーとJMSセッションはトランザクション処理され、多くのオーバーヘッドが発生します)。トランザクションを指定した理由は
キャッシング(休止)テクノロジーとそれを使用するトランザクションを使用しています。したがって、2つのトランザクションを使用しています。1つはJMS txで、もう1つはキャッシングテクノロジーtxです。メッセージを消費し、メッセージがコミットされて確認応答がJMSに送信されるまで、すべてまたは何も起こらないようにしたい場合。txをキャッシュすると、最初にコミットされ、すぐにJMS txが次にコミットされ、メッセージが確認されます。それ以外の場合は、両方のtxがロールバックされ、メッセージが再生されます。現在、メッセージを3回再生していますが、それでも例外が発生する場合は、メッセージを処理不可能なキューに送信しています。
これは、多くのメッセージが同時にJMSに届き、システムで同時に処理する必要があるまでは正常に機能します。
そのようなシナリオに遭遇したとき、あなたは何をしましたか?なぜなら、永続的なサブスクリプションとトランザクションセッションを維持することは、JMSサーバーよりも大きなオーバーヘッドであり、サーバーのパフォーマンスを低下させるからです。