Das RabbitMQ-Routenmuster ist grundsätzlich dasselbe wie das Veröffentlichungs-/Abonnementmuster, wobei der Unterschied darin besteht, dass das Veröffentlichungs-/Abonnementmuster Nachrichten an alle gebundenen Warteschlangen weiterleitet, während das Routenmuster Nachrichten an die Warteschlange basierend auf der Routingübereinstimmung weiterleitet.

Von einem spezifischen Codierungsperspektive liegt der Unterschied zwischen dem Routenmuster und dem Veröffentlichungs-/Abonnementmuster in der Art des verwendeten Exchanges. Das Routenmuster verwendet den Direkttyp.

Architekturdiagramm

Direktes Muster

Erklärung:

  • P steht für den Produzenten, C1 und C2 stehen für die Verbraucher, die roten Kästchen repräsentieren Warteschlangen und X repräsentiert den Exchange.
  • Exchange-Typ ist direkt.
  • Logik für die Weiterleitung von Direkt-Exchange-Nachrichten: Vergleichen des Routing-Schlüssels in der Nachricht mit den Routing-Schlüsseln, die mit allen Bindungen dieses Exchanges verbunden sind. Wenn sie gleich sind, wird die Nachricht an die Warteschlange gesendet, die dieser Bindung entspricht.

Beispielsweise in obigem Diagramm: Der Routing-Schlüssel für Warteschlange Q1 ist orange, und die Routing-Schlüssel für Warteschlange Q2 sind schwarz und grün. Beim Senden einer Nachricht wird, wenn der Routing-Schlüssel der Nachricht orange ist, diese an Warteschlange Q1 weitergeleitet, und wenn der Routing-Schlüssel der Nachricht schwarz oder grün ist, wird sie an Warteschlange Q2 weitergeleitet.

Anwendungsfälle

Das Routenmuster ist eine Erweiterung des Veröffentlichungs-/Abonnementmusters. Daher sind die Anwendungsfälle ähnlich wie beim Veröffentlichungs-/Abonnementmuster, mit dem Unterschied, dass die Möglichkeit besteht, Nachrichtenabonnementbedingungen festzulegen.

Beispiel: Auf einer E-Commerce-Website gibt es vier Lagerhäuser in Ostchina, Südchina, Nordchina und Südwestchina, in denen jeweils eine Reihe von Lagerverwaltungssystemen bereitgestellt sind. Wenn ein Benutzer eine Bestellung aufgibt, ist das nächstgelegene Lager für den Versand verantwortlich.

Nachdem ein Benutzer eine Bestellung aufgegeben hat und eine Bestellnachricht generiert wurde, möchten wir die Nachricht an das entsprechende regionale Lagerverwaltungssystem zur Verarbeitung weiterleiten, was mit dem Routenmuster erreicht werden kann.

Die Routing-Schlüssel-Bindungen für die Lieferwarteschlangen der vier Lagerverwaltungssysteme lauten wie folgt:

  • Ostchina = ost
  • Nordchina = norden
  • Südchina = süd
  • Südwestchina = west

Nachdem ein Benutzer eine Bestellung aufgegeben hat, wird festgestellt, zu welcher Region die Adresse des Benutzers gehört, der Routing-Schlüssel berechnet und dann die Bestellnachricht mit dem Routing-Schlüssel gesendet. Der RabbitMQ-Direktexchange leitet sie an die entsprechende Warteschlange weiter.