Il modello di routing di RabbitMQ è fondamentalmente lo stesso del modello di pubblicazione/sottoscrizione, con la differenza che il modello di pubblicazione/sottoscrizione inoltra i messaggi a tutte le code collegate, mentre il modello di routing inoltra i messaggi alla coda in base alla corrispondenza di routing.

Dal punto di vista della codifica specifica, la differenza tra il modello di routing e il modello di pubblicazione/sottoscrizione risiede nel tipo di exchange utilizzato. Il modello di routing utilizza il tipo Direct.

Diagramma dell'Architettura

Modello Direct

Spiegazione:

  • P rappresenta il produttore, C1 e C2 rappresentano i consumatori, i riquadri rossi rappresentano le code e X rappresenta lo scambio (exchange).
  • Tipo di exchange è diretto.
  • Logica di inoltro dei messaggi dell'exchange diretto: confrontare la chiave di routing nel messaggio con le chiavi di routing associate a tutti i binding di questo exchange. Se sono uguali, il messaggio viene inviato alla coda corrispondente a quel binding.

Ad esempio, nel diagramma sopra: La chiave di routing per la coda Q1 è arancione, e le chiavi di routing per la coda Q2 sono nera e verde. Quando si invia un messaggio, se la chiave di routing del messaggio è arancione, verrà inoltrata alla coda Q1, e se la chiave di routing del messaggio è nera o verde, verrà inoltrata alla coda Q2.

Casi d'Uso

Il modello di routing è un'estensione del modello di pubblicazione/sottoscrizione, quindi i casi d'uso sono simili a quelli del modello di pubblicazione/sottoscrizione, con la differenza nella capacità di impostare condizioni di sottoscrizione dei messaggi.

Ad esempio: In un sito di e-commerce, ci sono quattro magazzini in Cina orientale, Cina meridionale, Cina settentrionale e Cina sud-occidentale, ognuno dei quali dispone di un insieme di sistemi di gestione del magazzino. Quando un utente effettua un ordine, il magazzino più vicino è responsabile della spedizione.

Dopo che un utente effettua un ordine e viene generato un messaggio di ordine, desideriamo inoltrare il messaggio al relativo sistema di gestione del magazzino regionale per l'elaborazione, il che può essere realizzato utilizzando il modello di routing.

I binding delle chiavi di routing per le code di consegna dei quattro sistemi di gestione del magazzino sono i seguenti:

  • Cina orientale = est
  • Cina settentrionale = nord
  • Cina meridionale = sud
  • Cina sud-occidentale = ovest

Dopo che un utente effettua un ordine, determinare a quale regione appartiene l'indirizzo dell'utente, calcolare la chiave di routing e quindi inviare il messaggio d'ordine con la chiave di routing. L'exchange diretto di RabbitMQ lo inoltrerà alla coda corrispondente.