質問に答えてください: すべてのキューがすべてのメッセージを受信するようにしますか?
答えが「はい」の場合は、ファンアウトを使用する必要があります。答えが「いいえ」の場合は、direct または topic を使用する必要があります。ダイレクトまたはトピックの要点は、ルーティング キーとバインディング キーの一致に基づいて、キュー自体がメッセージのみを受信することです。
キュー A は、コンシューマー C1 によってインスタンス化され、自動削除および非永続に設定される必要があります。このようにして、C1 が切断されると、キューが削除され、メッセージが破棄されます。
逆に、キュー B と C は、交換が個別に行われる場合、またはプロデューサーによって行われる場合にインスタンス化する必要があります。は非自動削除に設定する必要があり、おそらく永続的です。永続的なキューを使用している場合は、永続的なメッセージが必要になる場合があります (キュー A が存在しなくても心配する必要はありません。永続的なメッセージはここでは問題になりません)。このようにして、プロデューサーがメッセージの送信を開始するとすぐに、キューがメッセージのキューイングを開始し、コンシューマーがまだ実行されていない場合でも、メッセージが失われることはありません。
直接またはトピックの交換を使用するかどうかは、個人的な好みです。トピック交換はルーティング/バインディングキーで多くの柔軟性を可能にしますが、直接交換はより高速である必要があることを理解しています。
私はあなたが最後の質問で何を意味するのか100%ではありません. 各メッセージは、交換に 1 回だけ書き込む必要があります。ファンアウトを使用する場合、交換はメッセージをキューに正しくルーティングするように処理します。それだけです。直接交換またはトピック交換を使用している場合は、各キューが正しいメッセージを確実に受信するようにバインディング キーに依存します。複数のルーティング キーを使用してメッセージを送信する必要はありません。そのようなことをしたい場合は、理解が逆になっています。ただし、1 つのキューから複数のバインディング キーを交換に使用できます。
簡単な例。X は直接交換です。B には黒のバインディング キーがあり、C には黒のバインディング キーが 1 つと白のバインディング キーが 1 つあります。P は、ルーティング キーが黒または白のメッセージを送信します。黒の場合は B と C の両方がメッセージを受信し、白の場合は C のみがメッセージを受信します。