3

以下は、キューの望ましい設計です。

  • Pプロデューサー。データを挿入するアプリケーション
  • X交換。
  • C1-C3コンシューマー。キューから読み取るアプリケーション

キューの詳細:

  • A.キューログと同じように、クライアントバインディングがない場合、メッセージは破棄されます。
  • B.これは作業キューです。基準が一致する場合は、何かを実行します。
  • C.また作業キュー。データを変換します

Aはオプションですが、BCは、クライアントプロセスが接続するまで常にキューに入れられます。

望ましいキューの設計

問題は、どのタイプの交換を使用するかを決定することです。それはファンアウトですか、直接ですか、それともトピックですか?クライアントが接続されていない場合にAキューでメッセージを破棄したかったのですが、B&Cは常にメッセージを保持する必要があるためです。

また、プロデューサーは取引所に1回書き込む必要がありますか、それとも異なるルーティングキーまたはトピックを使用して複数回書き込む必要がありますか?

4

1 に答える 1

7

質問に答えてください: すべてのキューがすべてのメッセージを受信するようにしますか?

答えが「はい」の場合は、ファンアウトを使用する必要があります。答えが「いいえ」の場合は、direct または topic を使用する必要があります。ダイレクトまたはトピックの要点は、ルーティング キーとバインディング キーの一致に基づいて、キュー自体がメッセージのみを受信することです。

キュー A は、コンシューマー C1 によってインスタンス化され、自動削除および非永続に設定される必要があります。このようにして、C1 が切断されると、キューが削除され、メッセージが破棄されます。

逆に、キュー B と C は、交換が個別に行われる場合、またはプロデューサーによって行われる場合にインスタンス化する必要があります。は非自動削除に設定する必要があり、おそらく永続的です。永続的なキューを使用している場合は、永続的なメッセージが必要になる場合があります (キュー A が存在しなくても心配する必要はありません。永続的なメッセージはここでは問題になりません)。このようにして、プロデューサーがメッセージの送信を開始するとすぐに、キューがメッセージのキューイングを開始し、コンシューマーがまだ実行されていない場合でも、メッセージが失われることはありません。

直接またはトピックの交換を使用するかどうかは、個人的な好みです。トピック交換はルーティング/バインディングキーで多くの柔軟性を可能にしますが、直接交換はより高速である必要があることを理解しています。

私はあなたが最後の質問で何を意味するのか100%ではありません. 各メッセージは、交換に 1 回だけ書き込む必要があります。ファンアウトを使用する場合、交換はメッセージをキューに正しくルーティングするように処理します。それだけです。直接交換またはトピック交換を使用している場合は、各キューが正しいメッセージを確実に受信するようにバインディング キーに依存します。複数のルーティング キーを使用してメッセージを送信する必要はありません。そのようなことをしたい場合は、理解が逆になっています。ただし、1 つのキューから複数のバインディング キーを交換に使用できます。

簡単な例。X は直接交換です。B には黒のバインディング キーがあり、C には黒のバインディング キーが 1 つと白のバインディング キーが 1 つあります。P は、ルーティング キーが黒または白のメッセージを送信します。黒の場合は B と C の両方がメッセージを受信し、白の場合は C のみがメッセージを受信します。

于 2012-10-02T09:44:42.903 に答える