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.

Tipp

Wenn Sie noch Fragen bez├╝glich Publisher haben, dann k├Ânnen Sie gerne den jeweiligen Glossar dazu besuchen und sich ├╝ber das Thema informieren.

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.

Tipp

Wenn Sie noch Fragen bez├╝glich eines Online Marketing Themas haben, dann k├Ânnen Sie gerne unseren Glossar besuchen und sich ├╝ber das Thema informieren, wo Sie noch speziell Fragen haben.


Sie haben noch Fragen?

Kontaktieren Sie uns

Kostenloser SEO-Check der OSG


Weitere Inhalte