I. はじめに一般的に「Rabbit MQ」として知られる RabbitMQ (その名の通り、軽量で俊敏です) は、インターネット業界と従来の業界の両方で広く使用されている、非常に人気のあるオープンソースのメッセージ ミドルウェアです (元々は、通信業界のシステム間の信頼性の高い通信の問題を解決するために設計されました)。 1. 高い信頼性、容易な拡張性、高可用性、豊富な機能。 2. ほとんどの(あまり一般的ではない)プログラミング言語クライアントをサポートします。 3. RabbitMQ は AMQP プロトコルに準拠しており、Erlang (Ericsson が開発した汎用並行プログラミング言語) で記述されています。 4. RabbitMQ は MQTT などの他のプロトコルもサポートしています。 RabbitMQ には強力なプラグイン拡張性があり、公式ドキュメントとコミュニティの両方から幅広いプラグインを利用できます。 https://www.rabbitmq.com/community-plugins.html II. 全体的な論理アーキテクチャ1. RabbitMQ ExchangeタイプRabbitMQ で最も一般的な 4 つの交換タイプは、ファンアウト、ダイレクト、トピック、ヘッダーです。 ファンアウト ファンアウトは、図に示すように、エクスチェンジに送信されたすべてのメッセージを、そのエクスチェンジにバインドされているすべてのキューにルーティングします。 直接 直接型交換のルーティング ルールは単純です。次の図に示すように、BindingKey と RoutingKey が完全に一致するキューにメッセージをルーティングします。 トピック トピック型交換は直接マッチングルールを拡張し、BindingKeyとRoutingKeyが一致するキューにメッセージをルーティングします。ただし、マッチングルールは若干異なります。BindingKeyとRoutingKeyはどちらも「.」で区切られた文字列である必要があります。BindingKeyには、あいまいマッチングのために「*」と「#」という2つの特殊文字を含めることができます。「*」は1つの単語に一致し、「#」は複数の単語(0語を含む)に一致します。 ヘッダー ヘッダー型交換では、メッセージのルーティングにルーティングキーのマッチングルールは使用されません。代わりに、送信されたメッセージコンテンツのヘッダー属性に基づいてマッチングが行われます。キューと交換をバインドする際に、キーと値のペアのセットが指定されます。メッセージが交換に送信されると、RabbitMQはメッセージのヘッダーを取得し、キーと値のペアを比較して、キューと交換をバインドする際に指定されたキーと値のペアと完全に一致するかどうかを確認します。一致する場合、メッセージはそのキューにルーティングされます。ヘッダー型交換はパフォーマンスが低く、実用的ではありません。 2. RabbitMQデータストレージRabbitMQ メッセージには、次の 2 種類があります。1. 永続メッセージと非永続メッセージ。2. どちらの種類のメッセージもディスクに書き込まれます。 永続メッセージはキューに到着するとディスクに書き込まれ、バックアップもメモリ上に保持されます。メモリが不足すると、メッセージはメモリから削除されます。これにより、ある程度パフォーマンスが向上します。 非永続的なメッセージは通常、メモリに保存されます。メモリの負荷が高い場合、メモリスペースを節約するためにデータはディスクにフラッシュされます。 RabbitMQ ストレージ層は、キュー インデックスとメッセージ ストレージの 2 つの部分で構成されます。 III. 作業プロセス1. プロデューサーがメッセージを送信するプロセス1) プロデューサーは RabbitMQ に接続し、TCP 接続を確立してチャネルを開きます。 2) プロデューサーは Exchange を宣言し、交換の種類や永続的かどうかなどの関連プロパティを設定します。 3) プロデューサーはキューを宣言し、排他的、永続的、自動的に削除されるかどうかなどの関連属性を設定します。 4) プロデューサーは、bindingKey を使用して Exchange とキューをバインドします。 5) プロデューサーは、ルーティング キーや交換などの情報を含むメッセージを RabbitMQ ブローカーに送信します。 6) 対応する取引所は受信した routingKey に基づいて一致するキューを検索します。 7) 見つかった場合、プロデューサーから送信されたメッセージは対応するキューに格納されます。 8) 見つからない場合は、プロデューサーの設定属性に基づいて破棄するか、プロデューサーにロールバックします。 9) チャネルを閉じます。 10) 接続を閉じます。 2. 消費者がメッセージを受信するプロセス1) コンシューマーは RabbitMQ ブローカーに接続し、接続を確立してチャネルを開きます。 2) コンシューマーが RabbitMQ ブローカーの対応するキューからメッセージを消費することを要求すると、対応するコールバック関数を設定し、いくつかの準備作業を実行する場合があります。 3) RabbitMQ ブローカーが応答して対応するキューにメッセージを配信し、コンシューマーがメッセージを受信できるまで待機します。 4) コンシューマーは受信したメッセージを確認(ack)します。 5) RabbitMQ は対応する確認メッセージをキューから削除します。 6) チャンネルをオフにします。 7) 接続を閉じます。 |