La modalità topic di RabbitMQ è simile alla modalità di instradamento, ma la differenza è che il matching di instradamento della modalità topic supporta il matching fuzzy con wildcard, mentre la modalità di instradamento supporta solo il matching esatto.
Diagramma dell'architettura
Spiegazione:
- P rappresenta il produttore, X rappresenta lo scambio, e le code rosse Q1, Q2 rappresentano le code, C1, C2 rappresentano i consumatori.
- Il tipo di scambio è topic.
- Logica di inoltro del messaggio dello scambio del topic: Corrisponde la chiave di instradamento nel messaggio con le chiavi di instradamento associate a tutti i Binding dello Scambio tramite matching fuzzy, e se c'è una corrispondenza, invia il messaggio alla coda associata.
Suggerimento: La differenza tra la modalità topic e la modalità diretta è se il matching della chiave di instradamento supporta il matching fuzzy con wildcard, tutto il resto è uguale.
I wildcards supportati dal topic sono i seguenti:
-
#
(cancelletto) corrisponde a una o più parole -
*
(asterisco) corrisponde a una sola parola
Per esempio:
La chiave di instradamento collegata alla coda Q1 = *.orange.*
La chiave di instradamento collegata alla coda Q2 = *.*.rabbit
e lazy.#
Se la chiave di instradamento del messaggio è "quick.orange.rabbit", corrisponde sia alle code Q1 che Q2.
Suggerimento: Se la chiave di instradamento non corrisponde a nessuna coda, il messaggio verrà scartato. Se la chiave di instradamento è vuota, funziona allo stesso modo della modalità fanout ed inoltra il messaggio direttamente a tutte le code.
Caso d'uso
Come la modalità di instradamento, la differenza risiede nella flessibilità delle condizioni di sottoscrizione, in particolare nelle regole di matching più flessibili per la chiave di instradamento.