RabbitMQ

Ein Message Broker der das Advanced Message Queuing Protokoll nutzt.
Zusätzlich werden noch weitere Protokolle wie STOMP oder MQTT unterstützt.
RabbitMQ ist in Erlang geschrieben und steht seit 2007 unter MPL zur Verfügung.

Den Server starten und stoppen.

Der Standard Port ist 5672 das Management Web Interface ist unter Port 15672 zu erreichen aber nur wenn das rabbitmq_management Plugin aktiviert ist.

Das Kommandozeilen Tool zum managen vom RabbitMQ Broker heisst rabbitmqctl.

Sich den Status des Brokers anzeigen lassen.

Sich die Benutzer des Brokers anzeigen lassen.

rabbitmqctl bietet noch sehr viel mehr Funktionalität.

Exchange, Queue und Binding

Beim Messaging gibt es immer Sender und Empfänger die Nachrichten austauschen.
Der Sender sendet seine Message an den Exchange, das Binding leitet dann die Message in eine oder mehrere Queues, von dort holt der Empfänger die Message ab. Es gibt unterschiedliche Typen eines Exchange mit abweichendem Verhalten.

Ein Exchange hat einen der folgenden Typen: direct, fanout, topic und headers.
direct ist der Standardwert und sendet basierend auf dem routing key zur Queue.
fanout sendet alle Messages zu allen bekannten Queues.
topic sendet Messages basierend auf dem routing key an die entsprechenden Queues.
headers sendet Messages basierend auf den Header und ignoriert den routing key.

Sich Queues, Exchanges oder Bindings anzeigen lassen.

Dead Letter Exchanges

Wird eine Nachricht vom Empfänger abgelehnt wird diese als ‚dead-lettered‘ bezeichnet.
Nachrichten können zudem eine Lebenszeit haben, die man mit x-message-ttl in Millisekunden angibt. Eine Queue kann mit x-max-length eine maximale Anzahl von Nachrichten oder mit x-max-length-bytes eine maximale Größe besitzen.

Um die ‚dead-lettered‘ Nachrichten nicht zu verlieren kann man mit x-dead-letter-exchange einen Exchange definieren an den die Nachrichten gesendet werden. Es gibt zudem die Möglichkeit mit x-dead-letter-routing-key den Routing Key der Nachricht zu ersetzen.

Die Header einer ‚dead-lettered‘ Nachricht werden verändert, der Exchange Name wird mit dem Dead Letter Exchange Namen ersetzt. Ist der Routing Key verändert werden die Header CC und BCC entfernt. Zudem wird eine Liste mit den Namen x-death hinzugefügt mit zusätzlichen Informationen.

Virtual Hosts

RabbitMQ unterstützt zusätzlich noch die Möglichkeit mit /vhosts eine logische Trennung zu realisieren. Jeder Host ist wie ein eigener Server mit Queues, Exchanges, Bindings und Berechtigungen.

Messages

Jede AMQP Message hat Eigenschaften die als Meta Informationen getrennt vom Message Inhalt zur Verfügung stehen. Der Content-Type ist zum Beispiel eine dieser Eigenschaften, der Routing Key und noch zusätzliche Header. Man kann dies mit den X-Headern in HTTP vergleichen. Einige werden von RabbitMQ genutzt die anderen können vom Sender gesetzt und vom Empfänger verarbeitet werden.

User

User kann man über das User Interface des Management Plugins und rabbitmqctl verwalten. Das Permission System ermöglicht es den Zugriff auf VHosts, Exchanges und Queues zu regeln.

Permissions

Seit der Version 1.6.0 steht ein Permission System in Form einer Access Control List (ACL) zur Verfügung. Das System unterscheidet zwischen read, write und configure.
read erlaubt es Messages zu empfangen und die Leerung von Queues.
write erlaubt es Messages zu senden, ist auch zum erstellen von Bindings nötig.
configure erlaubt es Exchanges und Queues zu erstellen und löschen.

Der erste User bekommt vollen Zugriff auf den VHost. Der zweite User kann von allen Exchanges und Queues empfangen nur and Exchanges und Queues senden die mit logs- beginnen und keine Exchanges und Queues erstellen oder löschen.

Plugins

RabbitMQ bringt einige Plugins mit, die man sich einfach anzeigen lassen kann.

Die Plugins können nach Bedarf mit enable aktiviert werden.

Natürlich kann man Plugins mit disable auch wieder deaktivieren.

Das Management Plugin stellt ein User Interface unter Port 15672 bereit.
Eine API mit Dokumentation wird unter /api zur Verfügung gestellt.
Das Kommandozeilen Tool rabbitmqadmin kann unter /cli heruntergeladen werden.

Wenn die vorhandenen Plugins nicht ausreichen, kann man selbst das passende Plugin entwickeln.

Seit der Version 3.6.0 können Plugins direkt entwickelt werden.
Möchte man mehrer Projekte betreiben wird das RabbitMQ Public Umbrella Projekt zur Verfügung gestellt.

RabbitMQ Homepage
RabbitMQ Cloud Service: CloudAMQP