La trasmissione di un messaggio richiede quattro elementi:
- Producer: crea messaggi
- Exchange: inoltra i messaggi
- Queue: deposita i messaggi
- Consumer: rielabora il messaggio
Il producer pubblica un messaggio, ma non lo invia direttamente al consumer, perché lo trasmette all’exchange. Questo elemento è responsabile di inoltrare i messaggi a diverse code. Di queste si servono poi i consumer con i messaggi. Sia l’elemento exchange che la queue sono parti di RabbitMQ e vengono amministrati dal software. Per garantire che i messaggi raggiungano i destinatari corretti, si utilizzano le routing key. Il mittente dà al messaggio una routing key, che funziona come un indirizzo. Con l’ausilio di una chiave, l’exchange è in grado di riconoscere come indirizzare il messaggio.
Tra l’exchange e la queue si trova il cosiddetto binding. Attraverso di esso ogni singola coda viene collegata all’exchange. Inoltre il binding definisce i criteri con cui un messaggio deve essere inoltrato. Esistono quattro diversi tipi di distribuzione di un messaggio.
Direct Exchange
Un Direct Exchange è un collegamento diretto tra mittente e destinatario. Il producer fornisce il messaggio con una routing key, che corrisponde alla relativa binding key della coda. Ciò significa che entra in gioco una sola coda, a cui di solito corrisponde un consumer.
Topic Exchange
Questo tipo di exchange amplia il concetto di direct exchange. Qui non è solo un criterio (Routing Key = Binding Key) ma più code ad entrare in gioco. Funziona attraverso un metacarattere. Così possono essere accettate diverse code, ossia binding key, mentre altre restano escluse.
Fanout Exchange
La fanout exchange è una lista broadcast. Si inoltra un messaggio a tutte le possibili code. Non avviene alcun tipo di selezione. Si ignora una routing key.
Header Exchange
Anche nel caso di un header exchange il sistema ignora una routing key. Al suo posto è l’header a svolgere un ruolo fondamentale. Qui l’elemento exchange trova gli attributi, necessari per indirizzare le code corrette. In un certo modo un header exchange funziona in maniera analoga ad un topic exchange, poiché anche in questo caso vengono coinvolte molte code, ma non tutte.
I Consumer, e cioè i software destinatari, si registrano in code precise per potersi riferire ai messaggi. Perciò è previsto un Consumer per coda. Se più consumer prendono messaggi dalla stessa coda, non è possibile garantire la loro corretta distribuzione. Si decide in maniera facoltativa per ogni messaggio, se il destinatario deve riconoscerne il contenuto o se questo non è necessario.