Bei der Nachrichtenübermittlung gibt es vier Stationen:
- Producer: erzeugt Nachrichten
- Exchange: leitet Nachrichten weiter
- Queue: lagert Nachrichten
- Consumer: verarbeitet die Nachricht
Der
Producer veröffentlicht eine Nachricht, sendet diese aber nicht direkt
an den Consumer, sondern übergibt sie an die Exchange. Diese Position
ist dafür verantwortlich, die Nachrichten auf verschiedene
Warteschlangen zu verteilen. Aus denen bedienen sich Consumer mit
Nachrichten. Sowohl die Exchange als auch die Queues sind Teil von
RabbitMQ und werden von der Software verwaltet. Damit Nachrichten den
richtigen Adressaten erreichen, verwendet man Routing Keys.
Der Sender gibt der Nachricht einen Routing Key mit, der wie eine
Adresse funktioniert. Die Exchange erkennt anhand des Schlüssels, wie
die Nachricht geroutet werden muss.
Zwischen Exchange und Queue besteht ein sogenanntes Binding.
Über dieses ist jede einzelne Warteschlange mit dem Exchange verbunden.
Das Binding definiert zudem, nach welchen Kriterien eine Nachricht
weitergeleitet werden soll. Es gibt vier verschiedene Grundarten, wie
Nachrichten verteilt werden können.
Direct Exchange
Eine
Direct Exchange ist eine direkte Verbindung zwischen Sender und
Empfänger. Der Producer stattet die Nachricht mit einem Routing Key aus,
der einem entsprechenden Binding Key der Queue entspricht. Das
bedeutet, dass auch nur eine Queue in Frage kommt, an der wiederum in
der Regel nur ein Consumer hängt.
Topic Exchange
Dieser
Exchange-Typ erweitert das Konzept der Direct Exchange. Statt nur eines
Kriteriums (Routing Key = Binding Key) können mehrere Queues
angesprochen werden. Dies funktioniert über Platzhalter. So können
bestimmte Queues bzw. Binding Keys akzeptiert werden, andere bleiben
aber ausgeschlossen.
Fanout Exchange
Die
Fanout Exchange ist ein Broadcast. Man verteilt dabei eine Nachricht an
alle verfügbaren Queues. Es findet keine Sortierung statt. Ein Routing
Key wird ignoriert.
Header Exchange
Auch
bei Header Exchanges ignoriert das System einen Routing Key. Stattdessen
spielt der Header der Nachricht eine wichtige Rolle. In diesem findet
die Exchange die Attribute, um die korrekten Queues anzusteuern.
Insofern funktioniert eine Header Exchange analog zu Topic Exchanges, da
auch in diesem Fall mehrere Queues, aber nicht alle angesprochen werden
können.
Consumer, also die empfangende Software,
registrieren sich auf bestimmte Queues und beziehen von diesen die
Nachrichten. Deshalb ist auch pro Queue nur ein Consumer vorgesehen.
Sollten mehrere Consumer Nachrichten aus einer Warteschlange ziehen,
kann die korrekte Verteilung nicht garantiert werden. Optional
entscheidet man für jede Nachricht, ob der Empfänger den Erhalt
quittieren muss oder ob dies nicht notwendig ist.