6

Java Webアプリケーションでは、タイプAのメッセージが繰り返し読み込まれます(たとえば、1時間ごとに20,000)。次に、2番目のタイプのメッセージ(タイプB)がありますが、これらは時々表示されますが、タイプA(たとえば、3,000)よりも優先度が高くなります。オープンソースソフトウェアを使用して、これらのメッセージを1台以上のマシンで処理できるようにしたいと考えています。

優先度に基づいてキューからメッセージを送信するJMSサーバーがあれば、JMSでそれを行うことができるように思えます(たとえば、タイプAのすべてのメッセージがメッセージキューの一番上にあります)。

それを実行できるJMSサーバーを知っていますか?またはこれを実装する別の方法を知っていますか?

4

4 に答える 4

6

JMS 標準は、メッセージの優先順位のデフォルトをサポートしています。デフォルトは 4 です。他の値を指定できます)。メッセージプロデューサーとメッセージ自体でそれを設定する必要があると思います(両方にメソッドがあります)。

ActiveMQ はそれをサポートしていると思います。

ただし、多くの JMS ブローカでは優先度の処理がデフォルトで無効になっています。ブローカー構成のどこかに、「supportJMSPriority」など、変更が必要な可能性があるフラグがあります。

また、Apache Camel では独自のメッセージ リシーケンサーを記述できるため、任意の形式の優先度を実装できます。

于 2008-12-22T21:58:50.750 に答える
2

MessageProducer (QueueSender など) で "send(..)" を呼び出すときのメッセージの優先度を設定します。または、MessageProducer のデフォルトの優先度を 0 から 9 (9 が最高) に設定できます。メッセージ自体に優先度を設定しても機能しません。プロデューサーによってオーバーライドされます。

Uri は正しいです。優先度が尊重されるかどうかは、実装によって異なります。OpenJMS は通常、すぐに使用できる優先度を尊重すると思いますが、それを保証するものではありません。

JMS 仕様は次のように述べています。"JMS does not require that a provider strictly implement priority ordering of messages; however, it should do its best to deliver expedited messages ahead of normal messages."

于 2008-12-23T00:09:46.023 に答える
0

別の MDB を使用して、他のメッセージ タイプを明示的に処理することを検討してみてください。上記の優先順位の詳細は引き続き適用され、さらに各メッセージ タイプの同時処理をより詳細に制御できます。

ほとんどの場合、メッセージ タイプごとに 1 つの mdb またはメッセージ レシーバーを好みます。このようにして、トランザクションがロールバックされた場合、問題の原因となったメッセージの種類がすぐにわかります

カール

于 2009-02-16T20:40:21.933 に答える
0

複数のトピックを使用できます。優先度があっても、プロセッサが優先度の低いメッセージの処理に拘束されている場合、プロセッサはその処理を停止しません。

別のプロセッサがある場合、優先度の高いメッセージは、他のメッセージが処理されるのを待たずに、配信されるとすぐに処理を開始できます。

于 2009-02-16T20:56:51.907 に答える