Der RabbitMQ-Topic-Modus ähnelt dem Routing-Modus, aber der Unterschied besteht darin, dass das Routing-Matching des Topic-Modus Wildcard-Fuzzy-Matching unterstützt, während der Routing-Modus nur exaktes Matching unterstützt.
Architekturdiagramm
Erklärung:
- P steht für den Produzenten, X steht für den Austausch, und die roten Q1, Q2 stehen für die Warteschlangen, C1, C2 stellen die Verbraucher dar.
- Der Austauschtyp ist topic.
- Die Logik für die Weiterleitung von Topic-Austauschnachrichten: Es gleicht den Routing-Schlüssel in der Nachricht mit den Routing-Schlüsseln ab, die allen Bindungen des Austauschs durch Fuzzy-Matching zugeordnet sind, und wenn ein Treffer vorliegt, sendet es die Nachricht zur gebundenen Warteschlange.
Tipp: Der Unterschied zwischen dem Topic-Modus und dem Direkt-Modus liegt darin, ob das Matching des Routing-Schlüssels Wildcard-Fuzzy-Matching unterstützt, alles andere ist gleich.
Die von "topic" unterstützten Platzhalter sind wie folgt:
-
#
(Hash) passt zu einem oder mehreren Wörtern -
*
(Stern) passt nur zu einem Wort
Zum Beispiel:
Der an die Warteschlange Q1 gebundene Routing-Schlüssel = *.orange.*
Der an die Warteschlange Q2 gebundene Routing-Schlüssel = *.*.rabbit
und lazy.#
Wenn der Routing-Schlüssel der Nachricht "quick.orange.rabbit" lautet, passt er zu den Warteschlangen Q1 und Q2.
Tipp: Wenn der Routing-Schlüssel nicht zu einer Warteschlange passt, wird die Nachricht verworfen. Wenn der Routing-Schlüssel leer ist, funktioniert er genauso wie der Fanout-Modus und leitet die Nachricht direkt an alle Warteschlangen weiter.
Anwendungsfall
Wie beim Routing-Modus liegt der Unterschied in der Flexibilität der Abonnementbedingungen, insbesondere den flexibleren Matching-Regeln für den Routing-Schlüssel.