消息队列概述
Message Queue Framework (MQF)是一个允许模块将消息发布到队列的系统。 它还定义了将异步接收消息的消费者。 MQF使用RabbitMQ作为消息代理,该消息代理为发送和接收消息提供了一个可伸缩的平台。 它还包括用于存储未传递消息的机制。 RabbitMQ基于高级消息队列协议(AMQP) 0.9.1规范。
下图说明了Message Queue框架:
-
发布器是将消息发送到交换的组件。 它知道要发布到的交换以及它发送的报文的格式。
-
Exchange接收来自发布者的消息并将消息发送到队列。 虽然RabbitMQ支持多种类型的交换,但Commerce仅使用主题交换。 主题中包含路由密钥,路由密钥包含以点分隔的文本字符串。 主题名称的格式为
string1.string2
:例如,customer.created
或customer.sent.email
。代理允许您在设置转发消息的规则时使用通配符。 您可以使用星号(
*
)替换 one 字符串,或使用井号(#
)替换0个或多个字符串。 例如,customer.*
将筛选customer.create
和customer.delete
,但不筛选customer.sent.email
。 但是customer.#
将筛选customer.create
、customer.delete
和customer.sent.email
。 -
队列是存储消息的缓冲区。
-
消费者接收消息。 它知道要使用哪个队列。 它可以将消息的处理器映射到特定队列。
也可以不使用RabbitMQ设置基本消息队列系统。 在此系统中,MySQL适配器将消息存储在数据库中。 三个数据库表(queue
、queue_message
和queue_message_status
)管理消息队列工作负载。 CRON工作能确保消费者能够接收信息。 此解决方案不是非常可扩展。 应尽可能使用RabbitMQ。