RabbitMQ für Shopware 6
RabbitMQ Messaging Broker für Shopware

RabbitMQ für Shopware 6

Die Kommunikation ist eine der größten Herausforderungen der IT. Verschiedene Dienste müssen untereinander kommunizieren, Informationen austauschen und Daten übermitteln.

Dabei ist die Art und Weise der Kommunikation zwischen den Anwendungen eine Problemstellung, die nicht zu unterschätzen ist. Sprachbarrieren sind beispielsweise auch in der IT ein Thema, sobald die kommunizierenden Anwendungen in verschiedenen Programmiersprachen geschrieben sind.

Außerdem muss der Informationsaustausch kontrolliert ablaufen, da sich sonst die Nachrichten gegenseitig blockieren. Dadurch entsteht ein Stau und Prozesse können nicht mehr optimal ablaufen.

Den Begriff “Nachricht” verwenden wir in diesem Kontext sehr offen. Damit werden sowohl Anweisungen an andere Programme als auch tatsächliche Textnachrichten bezeichnet und demzufolge die gesamte Informationsvermittlung erfasst.

Um eine gemeinsame Kommunikationsinfrastruktur zu erreichen, die wächst und skaliert und dadurch auch anspruchsvolle Bedingungen erfüllt, kann eine Art Mittelsmann eingeschaltet werden. Dieser Dienst übernimmt die Verteilung der Nachrichten und wird Messaging Broker genannt.

Was ist RabbitMQ?

RabbitMQ ist einer der bekanntesten Messaging Broker (auch Nachrichten-Broker), in der Programmiersprache Erlang geschrieben und für Linux, BSD, Unix, Windows sowie macOS lauffähig. Es basiert auf der Idee des Advanced Message Queuing Protocols (AMQP).

Der große Vorteil von diesem Protokoll: Sender und Empfänger müssen nicht die gleiche Programmiersprache verstehen. Außerdem sorgt AMQP in Zusammenarbeit mit einem Nachrichten-Broker für eine robuste Datenübertragung und lässt es zu, dass Nachrichten in einer Warteschlange gelagert werden. Dadurch kann die Kommunikation asynchron erfolgen. Die Information muss vom Empfänger (Consumer) nicht direkt angenommen, verarbeitet und der Empfang bestätigt werden. Stattdessen kann dieser sich die Nachricht aus der Warteschlange holen, sobald er freie Kapazitäten hat. Der Sender (Producer) kann in der Zwischenzeit schon weiterarbeiten.

Ähnlich wie andere Netzwerkprotokolle legt AMQP ein Regelwerk und eine Syntax für die Kommunikation von zwei oder mehr Teilnehmern fest. Zur Nachrichtenübermittlung setzt das Protokoll auf Messaging Broker – wie eben RabbitMQ.

Inzwischen hat sich RabbitMQ etwas von AMQP gelöst und funktioniert dank Plugins auch mit anderen Protokollen wie STOMP oder MQTT. Grundsätzlich bleibt die Idee aber gleich: Zwischen Sender und Empfänger einer Nachricht liegt eine Warteschlange.

Exkurs: Nachrichten-Broker sind Softwaremodule in sogenannten Messaging-Middleware-Lösungen. Als eigenständige Services ermöglichen sie Anwendungen, Systemen und Services miteinander zu kommunizieren und Informationen auszutauschen.

Als Vermittler validieren, speichern und leiten sie Nachrichten weiter, um diese an ihre entsprechenden Ziele zu übergeben. Mit ihrer Hilfe können Sender Nachrichten ausgeben, ohne zu wissen, wo die Empfänger sind, ob sie aktiv sind oder wie viele es von ihnen gibt.

Um dies zu bewerkstelligen übersetzt der Nachrichten-Broker die Nachricht zwischen formalen Messaging-Protokollen. Selbst wenn die voneinander abhängigen Dienste in verschiedenen Sprachen geschrieben oder auf unterschiedlichen Plattformen implementiert sind, können sie so direkt miteinander kommunizieren.

Der Aufgabenbereich eines Nachrichten-Brokers beinhaltet Warteschlangenmanagement zur Verarbeitung der Interaktionen zwischen mehreren Nachrichtenwarteschlangen sowie Services, die von der Datenweiterleitung über Nachrichtenübersetzung und Persistenz bis hin zur Clientstatusverwaltung reichen.

Nachrichten-Broker lassen sich in vielen verschiedenen Branchen für die unterschiedlichsten Geschäftsanforderungen in verschiedenen Unternehmensumgebungen einsetzen. Sie sind vor allem dort nützlich, wo eine zuverlässige Kommunikation zwischen Anwendungen und eine sichere Nachrichtenübermittlung notwendig sind. So werden sie beispielsweise für Finanztransaktionen und Zahlungsabwicklungen oder in der Auftragsbearbeitung und -erfüllung im E-Commerce eingesetzt. Da sie die Fehlertoleranz erhöhen und garantieren, dass Nachrichten nur einmal abgerufen werden, sind Nachrichten-Broker eine schlüssige Wahl für die Verarbeitung von Online-Bestellungen.

Wie funktioniert RabbitMQ?

Dienste und Anwendungen wie z.B. Shopware erzeugen für alle möglichen Vorgänge Nachrichten, die in Queues gesammelt und dann nach und nach abgearbeitet werden. RabbitMQ ist als Message Broker für die Verarbeitung solcher Messages optimiert und performanter als die Anwendungen selbst.

Die Nachrichtenübermittlung läuft über vier Stationen:

  1. Producer: Hier werden die Nachrichten erzeugt.
  2. Exchange: Dieser ist für die Weiterleitung der Nachrichten zuständig.
  3. Queue: An dieser Stelle werden die Nachrichten gelagert.
  4. Consumer: Hier werden die Nachrichten verarbeitet.

Der Producer erstellt eine Nachricht und versendet diese. Allerdings nicht direkt an den Consumer, sondern zunächst an die Exchange. Diese verteilt die Nachrichten auf verschiedene Warteschlangen. Von der Nachrichtenwarteschlange haben wir schon weiter oben gesprochen. Dabei handelt es sich um eine Unterstruktur oder Komponente, die von Nachrichten-Brokern eingesetzt wird, um einen zuverlässigen Nachrichtenspeicher und die garantierte Zustellung zu gewährleisten. Hier werden die Nachrichten gespeichert und geordnet, bis der Empfänger diese verarbeiten kann. Es ist möglich, dass in einer Queue Nachrichten von mehr als einem Producer landen. Die Nachrichten werden in exakt derselben Reihenfolge gespeichert, in der sie übertragen wurden und verbleiben in der Warteschlange, bis der Konsument den Empfang bestätigt. Exchange und Queues sind Teil von RabbitMQ und werden von der Software verwaltet.

Um zu gewährleisten, dass die Nachrichten den richtigen Adressaten erreichen, gibt der Producer der Nachricht einen Routing Key mit. Dieser funktioniert wie eine Adresse. Die Exchange erkennt anhand des Keys, wie die Nachricht geroutet werden muss.

Über ein sogenanntes Binding ist die Exchange mit jeder einzelnen Warteschlange verbunden. Außerdem definiert das Binding, nach welchen Kriterien eine Nachricht weitergeleitet werden soll.

Nachrichten können grundlegend nach vier verschiedenen Grundarten verteilt werden:

  • Bei einer Direct Exchange besteht eine direkte Verbindung zwischen Sender und Empfänger. Die Nachricht wird vom Producer mit einem Routing Key ausgestattet, der einen entsprechenden Binding Key der Queue als Gegenstück hat. Dadurch kommt nur eine Warteschlange in Frage, an der in der Regel nur ein Consumer hängt.
  • Das Konzept der Direct Exchange wird bei einer Topic Exchange erweitert. Über Platzhalter in den Keys können mehrere Queses angesprochen werden. Bestimmte Binding Keys können so akzeptiert werden, während andere ausgeschlossen werden.
  • Eine Fanout Exchange verteilt eine Nachricht an alle verfügbaren Warteschlangen – ohne Sortierung. Der Routing Key wird ignoriert.
  • Bei einer Header Exchange wird ebenfalls der Routing Key ignoriert und stattdessen Wert auf den Header der Nachricht gelegt. Dort findet die Exchange Attribute, die es ermöglichen, die korrekten Queues anzusteuern. Ähnlich wie bei Topic Exchanges können dadurch mehrere, aber nicht alle Queues angesprochen werden.

Consumer registrieren sich auf bestimmte Queues und ziehen sich die Nachrichten aus der Warteschlange. Pro Queue ist nur ein Consumer vorgesehen, da die korrekte Verteilung nicht garantiert werden kann, wenn sich mehrere Consumer Nachrichten aus der Warteschlange ziehen. Für jede Nachricht wird optional entschieden, ob der Consumer den Empfang bestätigen muss.

Es kann passieren, dass ein Consumer die Nachricht in der Warteschlange nicht abrufen kann, weil z.B. die Verbindung zusammengebrochen ist. Was passiert dann?

Man kann entscheiden, ob der Consumer ordentlich bestätigen muss, dass er die Nachricht erhalten hat oder ob die reine Auslieferung ausreicht. Sollte der Sender eine Empfangsbestätigung erwarten und keine Antwort vom Consumer erhalten, versucht der Broker entweder, die Nachricht an einen anderen Empfänger oder erneut an den eigentlichen Empfänger zu senden. Erwartet der Sender allerdings keine Bestätigung, ist die Nachrichtenübermittlung aus seiner Sicht mit der Auslieferung abgeschlossen. In diesem Fall geht die Nachricht verloren, wenn sie nicht vom Empfänger abgerufen wird.

Allerdings kann ein Client die Annahme einer Nachricht bewusst ablehnen, wenn beispielsweise die Verarbeitung der Nachricht nicht funktioniert. Das veranlasst den Broker entweder dazu, die Nachricht komplett zu löschen, oder sie erneut in die Warteschlange einzugliedern.

Was sind die Vorteile von RabbitMQ?

Die Verwendung eines Nachrichten-Brokers optimiert die Kommunikation zwischen Anwendungen. Dies stellt sicher, dass die Daten sicher, zuverlässig und effizient zwischen den Komponenten eines Systems gesendet werden. Dabei überzeugt RabbitMQ vor allem durch seine schlanke Konstruktion.

Der Einsatz von RabbitMQ ermöglicht asynchrones Messaging. Sender und Empfänger müssen nicht zur selben Zeit erreichbar sein und können trotzdem miteinander kommunizieren. Diese Art der Kommunikation verhindert den Verlust wertvoller Daten und stellt sicher, dass Systeme auch bei unterbrochener Konnektivität oder Latenzproblemen weiter funktionieren. So steigt die Ausfallsicherheit und die Fehlertoleranz wird verbessert. Außerdem wird so garantiert, dass Nachrichten einmal und in der richtigen Reihenfolge zugestellt werden.

Von Vorteil ist, dass der Producer den Versand der Nachricht nicht selbst übernehmen muss. RabbitMQ nimmt dem Sender die Nachricht ab, sodass dieser eine neue Aufgabe beginnen kann.

 

Als Kunde von Timme Hosting haben Sie die Möglichkeit, RabbitMQ an Shopware 6 und andere kompatible Systeme anzubinden. Unsere erfahrenen Sysadmins stehen Ihnen für Fragen wie gewohnt zur Verfügung.

Testen Sie uns 14 Tage kostenlos Jetzt testen