4

現在、RabbitMQ を評価してキューを管理しています。RabbitMQ がメモリ内のキュー アイテムをどのように管理しているのか疑問に思っていました。

このパブリッシャー サブスクライバーの例でhttp://www.rabbitmq.com/tutorials/tutorial-three-python.html rabbitMQ パブリッシャー サブスクライバー

サブスクライバー (コンシューマー) ごとにキューを作成していますか? たとえば、2 つのコンシューマーがある場合、メッセージを保存するためのメモリ使用量を 2 倍にしますか?

キューに複数のワーカーをアタッチすると、各コンシューマーが異なるメッセージを受信する作業キューになるという印象を受けました。

このためにチャットサーバーを構築しているとしましょう。コンシューマごとにキューを作成する必要がありますか? そして、メモリ内のすべてのメッセージは、接続されているユーザーの数で乗算されますか? または、メモリ内に単一のメッセージしかなく、すべてのキューがそのメッセージへのポインターを持っていますか。

トピックメッセージの例でも。http://www.rabbitmq.com/tutorials/tutorial-five-python.html

トピックメッセージ

1kb のメッセージがあるとしましょう。2つのキューに2kbのメモリ使用量がありますか? Q1、Q2 と言うメッセージはすべてのバインディング キーに一致します。

lazy.blue.*リッスンする別のキューを追加した場合、Q3としましょう。メモリ内に新しいキュー アイテムが作成されますか? データを複製しますか?

4

3 に答える 3

1

最初の例では、特定の交換にメッセージを送信する 1 つのパブリッシャーがあり、その交換は 2 つのキューにバインドされています。

コンシューマーごとにキューを作成することに関しては (「サブスクライバー」と言うときは、それを意味していると思います)、それは完全にあなた次第です。最初の図にはコンシューマーが表示されていませんが、これらのキューのいずれか、または両方でメッセージをリッスンするようにコンシューマーを構成できます。キュー (コンシューマーではない) はメモリに影響します。比較すると、交換はメモリコストの点で安価です。

2 番目の図では、はい、3 番目のキュー「Q3」を作成すると、メモリ内に新しいキューが作成されます。私はあなたの最後の質問に少し混乱しています.交換がすべてのバインディングパターンに一致するメッセージを送信するとどうなるかを尋ねているようです. ここでそれが発生した場合、メッセージは 3 つのキューすべてに送信されます。トピック タイプの交換 (この例では交換が設定されているため) は、バインディング キーがメッセージのルーティング キーと一致するすべてのキューにメッセージをルーティングするだけです。

于 2012-10-25T01:30:29.280 に答える
0

私は rabbitmq ハッカーではありませんが、各キューには 1 つの一意のメッセージ インスタンスへのポインターが必要であるという常識があります。

于 2012-10-24T09:03:28.500 に答える