Resumen de colas de mensajes
Message Queue Framework (MQF) es un sistema que permite a un módulo publicar mensajes en colas. También define los consumidores que recibirán los mensajes de manera asincrónica. El MQF usa RabbitMQ como agente de mensajería, que proporciona una plataforma escalable para enviar y recibir mensajes. También incluye un mecanismo para almacenar mensajes no enviados. RabbitMQ se basa en la especificación 0.9.1 del Protocolo avanzado de Message Queue Server (AMQP).
El diagrama siguiente ilustra el marco de trabajo de Message Queue:
-
Un publicador es un componente que envía mensajes a un intercambio. Sabe a qué intercambio publicar y el formato de los mensajes que envía.
-
Un intercambio recibe mensajes de los editores y los envía a las colas. Aunque RabbitMQ admite varios tipos de intercambios, Commerce solo utiliza intercambios de temas. Un tema incluye una clave de enrutamiento, que contiene cadenas de texto separadas por puntos. El formato del nombre de un tema es
string1.string2
: por ejemplo,customer.created
ocustomer.sent.email
.El agente de permite utilizar caracteres comodín al establecer reglas para reenviar mensajes. Puede usar un asterisco (
*
) para reemplazar una cadena o un signo de almohadilla (#
) para reemplazar 0 o más cadenas. Por ejemplo,customer.*
filtraríacustomer.create
ycustomer.delete
, pero nocustomer.sent.email
. Sin embargo,customer.#
filtraría porcustomer.create
,customer.delete
ycustomer.sent.email
. -
Una cola es un búfer que almacena mensajes.
-
Un consumidor recibe mensajes. Sabe qué cola consumir. Puede asignar procesadores del mensaje a una cola específica.
También se puede configurar un sistema básico de cola de mensajes sin usar RabbitMQ. En este sistema, un adaptador MySQL almacena mensajes en la base de datos. Tres tablas de base de datos (queue
, queue_message
y queue_message_status
) administran la carga de trabajo de la cola de mensajes. Los trabajos de Cron garantizan que los consumidores puedan recibir mensajes. Esta solución no es muy escalable. RabbitMQ debe usarse siempre que sea posible.