Översikt över meddelandeköer
MQF (Message Queue Framework) är ett system som gör att en modul kan publicera meddelanden till köer. Den definierar också de konsumenter som tar emot meddelandena asynkront. MQF använder RabbitMQ som meddelandeförmedlare, som tillhandahåller en skalbar plattform för att skicka och ta emot meddelanden. Den innehåller även en mekanism för att lagra olevererade meddelanden. RabbitMQ baseras på specifikationen Advanced Message Queuing Protocol (AMQP) 0.9.1.
Följande diagram visar Message Queue Framework:
-
En utgivare är en komponent som skickar meddelanden till ett utbyte. Det vet vilket utbyte som ska publiceras och formatet på de meddelanden som skickas.
-
Ett utbyte tar emot meddelanden från utgivare och skickar dem till köer. Även om RabbitMQ har stöd för flera typer av utbyten använder Commerce endast ämnesutbyten. Ett ämne innehåller en routningsnyckel, som innehåller textsträngar avgränsade med punkter. Formatet för ett ämnesnamn är
string1.string2
: till exempelcustomer.created
ellercustomer.sent.email
.Med förmedlaren kan du använda jokertecken när du anger regler för vidarebefordrande meddelanden. Du kan använda en asterisk (
*
) om du vill ersätta __-strängen eller ett nummertecken (#
) om du vill ersätta 0 eller fler strängar.customer.*
skulle till exempel filtreras påcustomer.create
ochcustomer.delete
, men intecustomer.sent.email
.customer.#
skulle dock filtreras påcustomer.create
,customer.delete
ochcustomer.sent.email
. -
En kö är en buffert som lagrar meddelanden.
-
En konsument får meddelanden. Den vet vilken kö som ska användas. Den kan mappa behandlare av meddelandet till en viss kö.
Ett grundläggande meddelandekösystem kan också konfigureras utan att använda RabbitMQ. I det här systemet lagrar ett MySQL-kort meddelanden i databasen. Tre databastabeller (queue
, queue_message
och queue_message_status
) hanterar arbetsbelastningen för meddelandekön. Kronjobb säkerställer att konsumenterna kan ta emot meddelanden. Den här lösningen är inte särskilt skalbar. RabbitMQ ska användas när det är möjligt.