RabbitMQ

Was ist RabbitMQ?

Unter RabbitMQ versteht man eine Open-Source Message Broker Software (auch als “Message-oriented Middleware” bezeichnet). Ursprünglich implementierte sie das Advanced Message Queuing-Protokoll (AMQP) und wurde seitdem um eine Plug-In-Architektur zur Unterstützung von STOMP (Streaming Text Oriented Messaging Protocol) erweitert.

Das RabbitMQ-Serverprogramm ist in der Programmiersprache “Erlang” geschrieben, welches auf dem Open Telecom Platform Framework für Clustering und Failover basiert. Die Client-Bibliotheken für die Schnittstelle zum Broker sind für alle gängigen Programmiersprachen verfügbar. Message-Oriented Middleware (MOM) ist eine Software- oder Hardware-Infrastruktur, die das Senden und Empfangen von Nachrichten zwischen verteilten Systemen unterstützt.

Entwicklung

Rabbit Technologies startete im Jahr 2007 als Joint Venture zwischen LShift und CohesiveFT und wurde im April 2010 von SpringSource, einem Geschäftsbereich von VMware, erworben. Das Projekt wurde im Mai 2013 Teil von Pivotal Software.

Der Quellcode wird unter der Mozialla Public License veröffentlich und besteht aus:

  • Austauschserver
  • Gateways für die Protokolle AMQP, HTTP, STOMP und MQTT
  • AMQP-Client-Bibliotheken für Java, .NET Framwork und Erlang
  • Plug-In-Plattform für benutzerdefinierte Ergänzungen mit einer vordefinierten Sammlung unterstützter Plug-Ins

Funktion

RabbitMQ und das Message Queuing sind eine Möglichkeit, Daten zwischen Prozessen, Anwendungen und Servern auszutauschen. Es handelt sich um eine Nachrichten-Warteschlangen-Software, die als Message Broder oder auch “Warteschlangen-Manager” bezeichnet wird. In kurzen Worten gesagt: Eine Software, mit der Warteschlangen definiert werden können.

Eine Nachricht kann beliebige Informationen enthalten. Sie könnte beispielsweise Informationen über einen Prozess oder eine Aufgabe enthalten, die in einer anderen Anwendung gestartet werden soll – die Anwendung sollte sich dabei auf einem anderem Server befinden. Es kann sich aber auch nur um eine einfache Textnachricht handeln. Die Queue-Manager-Software speichert die Nachrichten solange, bis eine empfangende Anwendung eine Verbindung herstellt und eine Nachricht aus der Warteschlange nimmt. Die empfangende Anwendung verarbeitet dann die Nachricht auf geeignete Weise.

RabbitMQ-Beispiel

Ein Nachrichtenbroker kann als Mittelsmann für verschiedene Dienste agieren, beispielsweise eine Webanwendung. Sie können verwendet werden, um die Last und die Lieferzeiten von Webanwendungs-Servern zu verringern, da Aufgaben, deren Bearbeitung eigentlich einige Zeit in Anspruch nehmen würde, an Dritte delegiert werden können, deren einzige Aufgabe darin besteht, sie auszuführen.

Dieses Beispiel zeigt ein Szenario, in welchem Benutzer mithilfe einer Webanwendung Informationen auf eine Webseite hochladen können. Die Webseite wird diese Informationen verarbeiten, ein PDF generieren und sie dem Benutzer per E-Mail weiterleiten. Die Verarbeitung der Informationen, das Generieren der PDF-Datei und das Weiterleiten der E-Mail dauert in diesem Fall einige Sekunden. Das ist einer der Gründe, warum eine Nachrichtenwarteschlange verwendet wird.

Hat der Benutzer Benutzerinformationen in das Web-Interface eingegeben, fügt die Webanwendung eine PDF-Verarbeitungs-Aufgabe sowie alle Informationen in eine Nachricht ein. Anschließend wird die Nachricht in eine RabbitMQ definierte Warteschlange gestellt.

Die grundlegende Architektur einer Nachrichtenwarteschlange ist simpel. Es gibt Client-Anwendungen, die als Produzenten bezeichnet werden, die Nachrichten erstellen und an den Broker (die Nachrichtenwarteschlange) übermitteln. Andere Anwendungen (Verbraucher genannt) stellen eine Verbindung zur Warteschlange her und abonnieren die zu verarbeitenden Nachrichten. Eine Software kann auch ein Produzent von Nachrichten sein. Nachrichten, die in die Warteschlange gestellt werden, werden gespeichert, bis der Verbraucher sie abruft.

Ziel und Anwendung

Mit der Warteschlange für Nachrichten können Webserver schnell auf Anforderungen reagieren, anstatt vor Ort Ressourcen-intensive Prozeduren ausführen zu müssen. Nachrichtenwarteschlangen eignen sich auch dann, wenn eine Nachricht an mehrere Empfänger zum Verbrauch oder zum Lastenausgleich zwischen Arbeitern verteilt werden sollen.

Der Verbraucher kann eine Nachricht aus der Warteschlange nehmen und die Verarbeitung der PDF-Datei starten, während der Produzent neue Nachrichten in der Warteschlange in die Warteschlange stellt. Hierbei kann sich der Verbraucher auf einem völlig anderen Server (als der Publisher) oder auch auf demselben Server befinden. Die Anforderung kann in einer Programmiersprache erstellt und in einer anderen Programmiersprache verarbeitet werden. Die beiden Anwendungen kommunizieren nur über die Nachrichten, die sie aneinander senden. Aufgrund dessen habe die beiden Anwendungen eine geringe Kopplung zwischen Sender und Empfänger.

Exchange (Austausch)

Nachrichten werden nicht direkt in einer Warteschlange veröffentlicht. Der Produzent sendet die Nachrichten an eine Vermittlungsstelle. Ein Exchange (Austausch) ist für das Weiterleiten der Nachrichten an die verschiedenen Warteschlangen verantwortlich. Ein Exchange akzeptiert Nachrichten in der Produzenten-Anwendung und leitet sie mithilfe von Bindungen und Routing-Schlüsseln an die Nachrichtenwarteschlangen weiter. Eine Bindung ist eine Verbindung zwischen einer Warteschlange und einem Exchange.

Nachrichtenfluss in RabbitMQ

  1. Der Produzent veröffentlicht zunächst eine Nachricht an den Exchange. Wenn der Exchange erstellt wurde, muss der Typ des Exchange angegeben werden.
  2.  Der Exchange empfängt die Nachricht und ist nun für das Weiterleiten der Nachricht verantwortlich. Dieser Austausch berücksichtigt je nach Art des Exchange unterschiedliche Nachrichtenattribute, wie z. B. den Routing-Schlüssel.
  3. Bindungen müssen vom Exchange an die Warteschlangen erstellt werden. In diesem Fall stehen zwei Bindungen zu zwei verschiedenen Warteschlangen zur Verfügung. Der Exchange leitet die Nachricht abhängig von den Nachrichtenattributen an die Warteschlange entsprechend weiter.
  4. Die Nachrichten bleiben in der Warteschlange, bis sie von einem Verbraucher verarbeitet werden.
  5. Der Verbraucher verarbeitet die Nachricht.

Exchange-Typen

Direkt

Ein Direktaustausch liefert Nachrichten an Warteschlangen, die auf einem Nachrichten-Routing-Schlüssel basieren. Bei diesem direkten Austausch wird die Nachricht an die Warteschlange weitergeleitet, deren Bindungsschlüssel genau mit dem Routing-Schlüssel der Nachricht übereinstimmt. Wenn die Warteschlange mit dem Bindungsschlüssel an den PDF-Prozess der Vermittlungsstelle gebunden ist, wird eine an die Vermittlungsstelle veröffentlichte Nachricht mit einem Routing-Schlüssel entsprechend weitergeleitet.

Fanout

Ein Fanout-Exchange leitet Nachrichten an alle Warteschlangen weiter, die an ihn gebunden sind.

Topic

Der Topic-Exchange führt einen sogenannten Platzhalterabgleich zwischen dem Routing-Schlüssel und dem in der Bindung angegebenen Routing-Muster durch.

Header

Header-Exchanges verwenden die Nachrichten-Kopfattribute für das Routing.

RabbitMQ und Serverkonzepte

Um eine korrekte Anwendung von RabbitMQ zu gewährleisten, sind zunächst folgende Beschreibungen des Konzeptes von großer Bedeutung:

  • Produzent (Producer): Anwendung, die Nachrichten sendet
  • Verbraucher (Consumer): Anwendung, die Nachrichten empfängt
  • Warteschlange: Puffer, in dem Nachrichten gespeichert werden
  • Nachricht: Informationen, die vom Hersteller über RabbitMQ an einen Verbraucher gesendet werden
  • Verbindung: Eine Verbindung ist eine TCP-Verbindung zwischen der Anwendung und dem RabbitMQ-Broker
  • Kanal: Ein Kanal ist eine virtuelle Verbindung innerhalb einer Verbindung. Wenn die Nachrichten aus einer Warteschlange veröffentlicht oder verwendet werden, geschieht dies alles über einen Kanal
  • Exchange: Empfängt Nachrichten vom Verbraucher und gibt sie abhängig von den durch den Exchange-Typ definierten Regeln in die Warteschlangen. Um Nachrichten empfangen zu können, muss eine Warteschlange mindestens an eine Vermittlungsstelle gebunden sein
  • Bindung: Eine Bindung ist eine Verbindung zwischen einer Warteschlange und einem Exchange
  • Routing-Schlüssel: Der Routing-Schlüssel ist ein Schlüssel, den der Exchange untersucht, um zu entscheiden, wie die Nachricht an Warteschlangen weitergeleitet werden soll. Der Routing-Schlüssel ist wie eine Adresse für die Nachricht
  • AMQP: Es steht für Advanced Message Queuing-Protocol und ist das von RabbitMQ für das Messaging verwendete Protokoll
  • Benutzer: Es ist möglich, sich mit einem angegebenen Benutzernamen und Passwort mit RabbitMQ zu verbinden. Jedem Benutzer können Berechtigungen zugewiesen werden, z. B. Rechte zum Lesen, Schreiben und Konfigurieren von Berechtigungen in der Instanz. Benutzern können auch Berechtigungen für bestimmte virtuelle Hosts zugwiesen werden
  • Virtueller Host: Ein virtueller Host bietet die Möglichkeit, Anwendungen zu trennen, die dieselbe RabbitMQ-Instanz verwenden. Unterschiedliche Benutzer können unterschiedliche Zugriffsrechte für verschiedene virtuelle Hosts und Warteschlangen haben und es können Austauschprogramme erstellt werden, sodass sie nur in einem Host vorhanden sind

Wenn die Anwendung zur Verarbeitung von PDF-Dateien abstürzt oder viele PDF-Anforderungen zur gleichen Zeit eingehen, werden die Nachrichten in der Warteschlange weiter gestapelt, bis der Verbraucher erneut startet. Es würde dann alle Nachrichten nacheinander verarbeiten.

Vorgehensweise

Zunächst muss eine CloudAMQP-Instanz eingerichtet oder RabbitMQ heruntergeladen und installiert werden. CloudAMQP ist eine gehostete RabbitMQ-Lösung. Man muss sich also nur für ein Konto anmelden und eine Instanz erstellen. Dabei muss RabbitMQ nicht eingerichtet werden. CloudAMQP übernimmt dies.

Sobald eine Instanz erstellt wurde, klickt man auf die entsprechende Instanz, um den Benutzernamen, das Kennwort und die Verbindungs-URL für die in der Cloud gehostete RabbitMQ-Instanz zu erstellen.

Unmittelbar nach dem Erstellen einer RabbitMQ-Instanz ist es möglich, eine Nachricht über mehrere Sprachen, Plattformen und Betriebssysteme zu senden. Diese Art der Nachrichtenverarbeitung entkoppelt die Prozesse und schafft ein hochgradig skalierbares System. Um einen Überblick über den Server zu erhalten, kann man die Verwaltungsschnittstelle öffnen.


Sie haben noch Fragen?

Kontaktieren Sie uns

Kostenloser SEO-Check der OSG


Weitere Inhalte