Quando si crea uno scambio diretto, esso dirigerà il messaggio alla coda che è legata ad esso.
Ok Julio, ma se ho 2 code su questo scambio?
Buona domanda amico mio! 😉
In questo caso, la Routing Key ha effetto.
Routing Key è un attributo responsabile di informare lo scambio a quale coda il messaggio deve essere diretto.
Nota: Lo scambio indirizzerà il messaggio ricevuto solo alle code che hanno chiavi di routing esattamente uguali.
Nota 2: Se le code vincolate hanno la stessa chiave di routing, questo messaggio viene indirizzato a quelle code in parallelo.
Fanout
A differenza del tipo Direct, nel fanout, non abbiamo la figura della Routing Key.
Quando uno scambio Fanout riceve un messaggio, una copia di questo messaggio viene inviata a tutte le code ad esso legate.
Topic
Immaginate che il tipo Topic sia il tipo Direct ma con particolarità, i Routing Keys Patterns.
Nel Topic, è possibile utilizzare dei pattern per le routing keys.
Questi pattern possono essere creati utilizzando i caratteri * e #.
Quando si crea un modello di chiave di routing con #, stiamo dicendo allo scambio che questo # può essere sostituito da 0 o n parole.
Quando usiamo *, stiamo dicendo allo scambio che * può essere sostituito solo da 1 parola.
Quindi, quando uno scambio di tipo Topic riceve un messaggio, controllerà la Routing Key del messaggio, lo confronterà con le Routing Key delle code e invierà una copia di quel messaggio a tutte le code in cui le Routing Key (messaggio e coda) combaciano.
Esempio:
Chiave di routing del messaggio: routing.key.test
Nel caso precedente, il messaggio sarà inviato alle code 1, 3 e 4. Non sarà inviato alla 2 perché il pattern richiede che ci sia solo una parola dopo “routing.” e nel nostro caso, ce ne sono 2.
Headers
Prima di spiegare questo scambio, è necessario informare che è possibile inviare attributi nell’intestazione di un messaggio (simile all’intestazione di HTTP)
Lo scambio Headers è simile a Topic, ma invece di confrontare Routing Key, confronta gli attributi presenti nell’intestazione del messaggio con gli attributi presenti negli argomenti definiti quando vincoliamo una coda nello scambio.
È possibile creare una regola per questa validazione.
Per creare questa regola, usiamo l’argomento con la chiave “x-match” con 2 valori possibili: any e all.
Qualsiasi è paragonabile a || di una condizione e tutti sono paragonabili a &&.
Esempio:
Quando inviamo un messaggio con argomento {“key1”: “value1”} nella sua intestazione, questo messaggio sarà diretto solo alla coda “headers.queue1” perché c’è l’attributo {“key1”: “value1”} negli argomenti di questa coda.
Nel caso della coda “headers.queue2”, lo scambio convaliderà se l’intestazione del messaggio contiene i 2 argomenti poiché “x-match” è impostato su all. Pertanto, lo scambio non troverà l’argomento {“key2”: “value2”} nell’intestazione del messaggio e non indirizzerà una copia di quel messaggio a quella coda.
Spero che questa rapida spiegazione possa aiutarvi a capire gli scambi RabbitMQ.
Per saperne di più: https://www.rabbitmq.com/tutorials/amqp-concepts.html
Entra nella nostra comunità Slack e leggi i nostri argomenti settimanali di Faun ⬇