メッセージキューの概要
メッセージキューフレームワーク(MQF)は、モジュールがキューにメッセージを公開できるようにするシステムです。 また、メッセージを非同期で受信する コンシューマーも定義します。 MQF は、メッセージの送受信に使用できるスケーラブルなプラットフォームを提供するメッセージング ブローカーとして RabbitMQ を使用します。 また、未配信メッセージを保存するメカニズムも含まれています。 RabbitMQ は、Advanced Message Queuing Protocol (AMQP) 0.9.1 仕様に基づいています。
次の図に、メッセージキューフレームワークを示します。
-
パブリッシャーは、メッセージを取引所に送信するコンポーネントです。 公開先の交換と、送信するメッセージの形式がわかります。
-
交換機はパブリッシャーからメッセージを受信し、キューに送信します。 RabbitMQ は複数の種類の交換をサポートしていますが、Commerceではトピック交換のみを使用します。 トピックにはルーティングキーが含まれます。ルーティングキーには、ドットで区切られたテキスト文字列が含まれます。 トピック名の形式は
string1.string2
です。たとえば、customer.created
またはcustomer.sent.email
です。ブローカーでは、メッセージ転送のルールを設定する際にワイルドカードを使用できます。 アスタリスク(
*
)を使用すると 1 文字列を置き換え、シャープ記号(#
)を使用すると 0 個以上の文字列を置き換えることができます。 例えば、customer.*
はcustomer.create
とcustomer.delete
に対してフィルタリングしますが、customer.sent.email
に対してはフィルタリングしません。 ただし、customer.#
はcustomer.create
、customer.delete
、customer.sent.email
に対してフィルタリングします。 -
キューは、メッセージを格納するバッファです。
-
消費者がメッセージを受信します。 使用するキューがわかります。 メッセージのプロセッサを特定のキューにマップできます。
基本的なメッセージキューシステムは、RabbitMQ を使用せずにセットアップすることもできます。 このシステムでは、MySQL アダプタがメッセージをデータベースに格納します。 3 つのデータベース・テーブル(queue
、queue_message
、queue_message_status
)がメッセージ・キューのワークロードを管理します。 Cron ジョブは、コンシューマーがメッセージを受信できるようにします。 このソリューションは拡張性に欠けます。 可能な限り RabbitMQ を使用すべきである。