質問: メッセージングの混乱:パブ/サブ対マルチキャスト対ファンアウト 私は私の会社のメッセージング技術を評価してきましたが、私はいくつかの用語の概念の違いによって非常に混乱しました。 **Pub/Sub** vs **Multicast** vs **Fan Out** I am working with the following definitions: * **Pub/Sub** has publishers delivering a separate copy of each message to each subscriber which means that the opportunity to guarantee delivery exists * **Fan Out** has a single queue pushing to all listening clients. * **Multicast** just spams out data and if someone is listening then fine, if not, it doesn't matter. No possibility to guarantee a client definitely gets a message. これらの定義は正しいですか?または、Pub/Subパターンとマルチキャスト、直接、ファンアウトなどのパターンを達成する方法? 私はすぐに使えるRabbitMQの定義を私たちのアーキテクチャに取り込もうとしていますが、私たちはアプリの仕様書を書こうとしている瞬間にサークルを回っています。 誰かが私に正しいかどうか私に助言することができますか?
回答: 私はあなたの3つの言葉を比較するのは混乱しています。 RabbitMQでは、FanoutとDirectは交換タイプです。 Pub-Subは一般的なメッセージングパターンですが、交換タイプはありません。そして、あなたは3番目に重要な交換タイプ、つまりTopicについて言及しませんでした。実際には、同じバインディングキーを持つ複数のキューを宣言するだけで、トピック交換でファンアウト動作を実装できます。また、ワイルドカードバインディングキーとして `*` を使用してキューを宣言することで、トピック交換の直接動作を定義できます。 Pub-Subは、一般に、アプリケーションがいくつかのサブスクライバによって消費されるメッセージをパブリッシュするパターンとして理解されています。 RabbitMQ/AMQPでは、メッセージは常にExchangeに公開されることを覚えておくことが重要です。次に、キューへのルートを交換します。キューは、メッセージを購読者に配信します。交換の振る舞いは重要です。トピック交換では、ルーティング決定を行うために、パブリッシャからのルーティングキーとサブスクライバからのバインディングキーが一致します。バインディングキーにはルーティングの決定にさらに影響するワイルドカードパターンを使用できます。より複雑なルーティングは、メッセージヘッダーの内容に基づいて行われます。ヘッダ交換型 RabbitMQはメッセージの配信を保証するものではありませんが、適切なオプション(永続的なメッセージの場合は配信モード= 2)を選択し、メッセージを破棄しないようにアプリケーションを実行する前に交換およびキューを宣言することにより、