När du skapar ett direktutbyte kommer meddelandet att skickas till den kö som är knuten till det.
Okej Julio, men om jag har två köer på det här utbytet?
God fråga min vän! 😉
I det här fallet träder Routing Key i kraft.
Routing Key är ett attribut som ansvarar för att informera växeln om till vilken kö meddelandet ska dirigeras.
Anmärkning: Växeln kommer endast att dirigera det mottagna meddelandet till köer som har exakt samma routingnyckel.
Anmärkning 2: Om de bundna köerna har samma routingnyckel, dirigeras detta meddelande parallellt till dessa köer.
Fanout
Till skillnad från Direct-typen har vi i Fanout inte figuren Routing Key.
När en Fanout-förmedling tar emot ett meddelande skickas en kopia av detta meddelande till alla köer som är bundna till den.
Topic
Föreställ dig att typen Topic är typen Direct men med särskildhet, Routing Keys Patterns.
I Topic är det möjligt att använda mönster för Routing Keys.
Dessa mönster kan skapas med hjälp av tecknen * och #.
När vi skapar ett rutningsnyckelmönster med # talar vi om för växeln att detta # kan ersättas med 0 eller n ord.
När vi använder * talar vi om för växeln att * endast kan ersättas med 1 ord.
När en central av typen Topic tar emot ett meddelande kommer den därför att kontrollera meddelandets Routing Key, jämföra med köernas Routing Keys och skicka en kopia av meddelandet till alla köer där Routing Keys (meddelande och kö) kombineras.
Exempel:
Messagets Routing Key: routing.key.test
I fallet ovan kommer meddelandet att skickas till köerna 1, 3 och 4. Det kommer inte att skickas till 2 eftersom mönstret kräver att det bara finns ett ord efter ”routing.” och i vårt fall finns det 2.
Headers
För att förklara detta utbyte är det nödvändigt att informera om att det är möjligt att skicka attribut i huvudet på ett meddelande (liknande HTTP-huvudet)
Headers-utbytet liknar Topic, men i stället för att jämföra Routing Key jämförs de attribut som finns i meddelandets huvud med de attribut som finns i argumenten som definieras när vi binder en kö i utbytet.
Det är möjligt att skapa en regel för denna validering.
För att skapa denna regel använder vi argumentet med nyckeln ”x-match” med 2 möjliga värden: any och all.
Any är jämförbart med || av ett villkor och all är jämförbart med &&.
Exempel:
När vi skickar ett meddelande med argumentet {”key1”: ”value1”} i dess rubrik, kommer meddelandet endast att skickas till kön ”headers.queue1” eftersom det finns attributet {”key1”: ”
I fallet med ”headers.queue2”-kön kommer utbytet att validera om meddelandehuvudet innehåller de två argumenten eftersom ”x-match” är satt till alla. Därför kommer utbytet inte att hitta {”key2”: ”
Jag hoppas att den här snabba förklaringen kan hjälpa dig att förstå RabbitMQ Exchanges.
Om du vill veta mer: https://www.rabbitmq.com/tutorials/amqp-concepts.html
Gäng med i vår community Slack och läs våra veckovisa Faun-ämnen ⬇
.