Panoramica delle code di messaggi
MQF (Message Queue Framework) è un sistema che consente a un modulo di pubblicare messaggi nelle code. Definisce inoltre i consumer che riceveranno i messaggi in modo asincrono. MQF utilizza RabbitMQ come broker di messaggistica, che fornisce una piattaforma scalabile per l'invio e la ricezione di messaggi. Include inoltre un meccanismo per l’archiviazione dei messaggi non consegnati. RabbitMQ è basato sulla specifica AMQP 0.9.1.
Il diagramma seguente illustra il framework della coda di messaggi:
-
Un editore è un componente che invia messaggi a uno scambio. Sa a quale scambio pubblicare e il formato dei messaggi che invia.
-
Uno scambio riceve messaggi dagli editori e li invia alle code. Sebbene RabbitMQ supporti più tipi di scambi, Commerce utilizza solo gli scambi di argomenti. Un argomento include una chiave di instradamento, che contiene stringhe di testo separate da punti. Il formato del nome di un argomento è
string1.string2
, ad esempiocustomer.created
ocustomer.sent.email
.Il broker consente di utilizzare i caratteri jolly per impostare le regole per l’inoltro dei messaggi. È possibile utilizzare un asterisco (
*
) per sostituire una stringa o un cancelletto (#
) per sostituire 0 o più stringhe. Ad esempio,customer.*
filtrerebbe sucustomer.create
ecustomer.delete
, ma non sucustomer.sent.email
. Tuttaviacustomer.#
filtrerebbe sucustomer.create
,customer.delete
ecustomer.sent.email
. -
Una coda è un buffer che memorizza i messaggi.
-
Un consumatore riceve messaggi. Sa quale coda consumare. Può mappare i processori del messaggio a una coda specifica.
È inoltre possibile configurare un sistema di coda di messaggi di base senza utilizzare RabbitMQ. In questo sistema, un adattatore MySQL memorizza i messaggi nel database. Tre tabelle di database (queue
, queue_message
e queue_message_status
) gestiscono il carico di lavoro della coda messaggi. I lavori di cron garantiscono che i consumatori siano in grado di ricevere messaggi. Questa soluzione non è molto scalabile. Se possibile, utilizzare RabbitMQ.