18

私が調べたほとんどのメッセージングシステムは、優先メッセージキューを基本的にサポートしているようです。たとえば、AMQPは最低2つの優先順位のみを指定します。AMQP実装であるRabbitMQは、優先順位をサポートしていません。ActiveMQは、数日以内にバージョン5.4で10のメッセージ優先度のサポートを取得します。10の優先度レベルは、JMS仕様で指定されています。

語順の非メッセージングの意味での優先度キューは、制約のない範囲の優先度を持つ任意のフィールドに基づいてその内容を順序付けます。このような実装がメッセージングシステムの一部として存在しないのはなぜですか?タイトルで聞いたように、優先順位は本質的に非メッセージングの概念ですか?

1つの答えは、優先度の概念により、優先度の高いメッセージが処理されている間、メッセージがキュー内で無限に長くなる可能性があることを理解しています。他に理由はありますか?

4

5 に答える 5

7

ところで、 ActiveMQは、JMSPriorityヘッダーを介した5.4.xでの優先メッセージをサポートするようになりました。

メッセージブローカーにメッセージが到着したときにバッファ内でメッセージを並べ替えさせるのではなく、優先度の高いメッセージ専用のコンシューマプールを用意するなど、優先度の高い消費を実装するためのより良い手法がよくあります。そうすれば、優先度の低いメッセージからのノイズの量に関係なく、優先度の高いメッセージは常に取得されます。

メッセージングの非同期性を考えると、JMSPriorityヘッダーなどを使用している場合は、バッファー、ネットワークパイプ、およびプリフェッチキューを優先度の低いメッセージで簡単に埋めることができます。

于 2011-02-09T16:28:54.550 に答える
6

一般に、メッセージキューシステムは、異種システム間でのメッセージの配信を保証するために使用されます。

通常、ある種の1回限りの保証があり、多くの場合、メッセージが順番に届くことがさらに約束されます。

概して、それはあなたが構築して一緒にフックしているシステムの設計に通知します。

分離されたシステム間の優先順位の概念は、多くの場合、それほど意味がありません。

とはいえ、一般的な回避策の1つは、2つのキューを用意することです。1つは高優先度、もう1つはバックグラウンド優先度です。ただし、固有の問題が明らかになります。もちろん、受信システムは、優先度の高い要求が着信したときに低レベルの要求の処理を停止できない可能性があるため、通常、そのレベルの粒度で順次実行されます。

于 2010-12-17T23:34:10.760 に答える
1

このアイデアは、優先度キューの優先度の値よりも、おそらく「プロセスの優先度」に似ているように思われます。確かに、それは、JMS仕様の1つか2つの文と一致しており、明らかにAMQP仕様とも一致しています。

于 2010-12-04T23:19:14.773 に答える
1

プログラムの使用が各メッセージを通過するよりも負担になるほど多くの優先順位が使用されていないことに注意する必要があります。

于 2010-12-17T22:59:42.590 に答える
0

メッセージングシステムは、時系列に合わせて設計および最適化されています。ファイルシステムは、ファイルを追加し、最初または途中にデータを挿入しないように最適化されています。キューのようなデータ構造は、通常、最後に追加し、先頭から削除するように最適化されています。ファイルシステムの場合、これは、ファイルへの追加(追加)とトランザクションログへの追加(削除)、およびメッセージファイルが消費されたら削除(削除)を意味します。

処理キューに優先順位を導入すると、キューが時系列と優先順位の両方でソートされたデータ構造に効果的に変換されます。基本的に、ファイルストレージの操作に関しては、ある種のインデックス作成戦略を作成する必要があるため、最適ではありません。

于 2018-03-09T17:45:36.110 に答える