Übersicht über Nachrichtenwarteschlangen
Das Message Queue Framework (MQF) ist ein System, das einem Modul das Veröffentlichen von Nachrichten in Warteschlangen ermöglicht. Außerdem werden die Verbraucher definiert, die die Nachrichten asynchron erhalten. Der MQF verwendet RabbitMQ als Messaging-Broker, der eine skalierbare Plattform für den Versand und Empfang von Nachrichten bietet. Sie enthält auch einen Mechanismus zum Speichern nicht zugestellter Nachrichten. RabbitMQ basiert auf der Spezifikation des Advanced Message Queuing Protocol (AMQP) 0.9.1.
Die folgende Abbildung zeigt das Message Queue-Framework:
-
Ein Publisher ist eine Komponente, die Nachrichten an einen Exchange sendet. Er weiß, in welchem Exchange er veröffentlicht werden soll, und kennt das Format der gesendeten Nachrichten.
-
Ein Exchange empfängt Nachrichten von Herausgebern und sendet sie an Warteschlangen. Obwohl RabbitMQ mehrere Arten von Austauschen unterstützt, verwendet Commerce nur Themenaustausche. Ein Thema enthält einen Routing-Schlüssel, der Textzeichenfolgen enthält, die durch Punkte getrennt sind. Das Format für einen Themennamen ist
string1.string2
: z. B.customer.created
odercustomer.sent.email
.Der Broker ermöglicht die Verwendung von Platzhaltern beim Festlegen von Regeln für die Weiterleitung von Nachrichten. Sie können ein Sternchen (
*
) verwenden, um eine Zeichenfolge oder ein Rautenzeichen (#
), um 0 oder mehr Zeichenfolgen zu ersetzen.customer.*
würden beispielsweise nachcustomer.create
undcustomer.delete
filtern, jedoch nicht nachcustomer.sent.email
.customer.#
würden jedoch nachcustomer.create
,customer.delete
undcustomer.sent.email
filtern. -
Eine Warteschlange ist ein Puffer, der Nachrichten speichert.
-
Ein Verbraucher erhält Nachrichten. Es weiß, welche Warteschlange verbraucht werden soll. Er kann Prozessoren der Nachricht einer bestimmten Warteschlange zuordnen.
Ein einfaches Meldungswarteschlangen-System kann auch ohne RabbitMQ eingerichtet werden. In diesem System speichert ein MySQL-Adapter Nachrichten in der Datenbank. Drei Datenbanktabellen (queue
, queue_message
und queue_message_status
) verwalten die Arbeitslast für die Nachrichtenwarteschlange. Cron-Aufträge stellen sicher, dass die Verbraucher Nachrichten empfangen können. Diese Lösung ist nicht sehr skalierbar. RabbitMQ sollte nach Möglichkeit verwendet werden.