Java EEアプリケーションがJMSをキューに継続的に送信しますが、JMSコンシューマアプリケーションがJMSの受信を停止することがあります。これにより、JMSキューが非常に大きくなり、サーバーが折りたたまれます。 私のサーバーはJBossまたはWebsphereです。アプリケーションサーバーは「タイムアウト」JMSメッセージを削除する戦略を提供していますか?JMSキューがいっぱいです
大規模なJMSキューを処理する戦略は何ですか?ありがとう!
Java EEアプリケーションがJMSをキューに継続的に送信しますが、JMSコンシューマアプリケーションがJMSの受信を停止することがあります。これにより、JMSキューが非常に大きくなり、サーバーが折りたたまれます。 私のサーバーはJBossまたはWebsphereです。アプリケーションサーバーは「タイムアウト」JMSメッセージを削除する戦略を提供していますか?JMSキューがいっぱいです
大規模なJMSキューを処理する戦略は何ですか?ありがとう!
すべての非同期メッセージングでは、「高速プロデューサ/スローコンシューマ」問題に対処する必要があります。これに対処するにはいくつかの方法があります。
これらのいずれかを正しく実装するための鍵は、システムがアプリケーションが応答する「ソフト」エラーを提供できることです。たとえば、多くのショップでは、QFULL条件を初めて取得したときに、キューのMAXDEPTHパラメーターを引き上げます。キューの深さが基礎となるファイルシステムのサイズを超えると、単一のキューに影響する「ソフト」エラーではなく、ファイルシステムが満たされ、ノード全体が影響を受けます。ファイルシステムがいっぱいになる前に待ち行列がMAXDEPTHに達するようにシステムをチューニングするほうがずっと良いですが、何らかの方法で完全な待ち行列に反応するようにアプリケーションや他のプロセスを装備しています。
他に何があっても、上記のオプション4は必須です。どのくらいのディスクを割り当てるか、またはデプロイするコンシューマインスタンスの数やメッセージの期限切れにかかわらず、コンシューマはメッセージ作成に常に追いつかない可能性があります。これが発生すると、プロデューサアプリはスロットルを戻すか、アラームを発して停止するか、ハングや死ぬ以外の何かをする必要があります。非同期メッセージングは、スペースを使い果たしてメッセージをキューに格納するまで非同期のみです。その後、あなたのアプリは同期しているので、たとえそれが正常に終了したとしても、その状況を正常に処理する必要があります。
確かに!
http://download.oracle.com/docs/cd/E17802_01/products/products/jms/javadoc-102a/index.html Message#setJMSExpiration(long)
正確に何をしますか?
ありがとうT.Rob!あなたの答えは包括的で美しいです! –
助けてくれてうれしい! –