Wanneer je een Direct uitwisseling aanmaakt, wordt het bericht naar de wachtrij geleid die eraan gebonden is.
Ok Julio, maar als ik 2 wachtrijen op deze uitwisseling heb?
Goede vraag mijn vriend 😉
In dat geval treedt de routeringssleutel in werking.
Routeringssleutel is een attribuut dat verantwoordelijk is voor het informeren van de uitwisseling naar welke wachtrij het bericht moet worden geleid.
Noot: De uitwisseling zal het ontvangen bericht alleen doorsturen naar wachtrijen die precies dezelfde routingsleutel hebben.
Noot 2: Als de gebonden wachtrijen dezelfde routingsleutel hebben, wordt dit bericht parallel naar die wachtrijen doorgestuurd.
Fanout
In tegenstelling tot het Direct type, hebben we in de fanout niet de Routing Key figuur.
Wanneer een Fanout uitwisseling een bericht ontvangt, wordt een kopie van dit bericht naar alle wachtrijen gestuurd die er aan gebonden zijn.
Topic
Stel u voor dat het Topic-type het Direct-type is, maar met bijzonderheid, de Routing Keys Patterns.
In het Topic is het mogelijk om patronen te gebruiken voor routing keys.
Deze patronen kunnen worden gemaakt met behulp van de * en # tekens.
Wanneer we een routing key patroon maken met #, zeggen we tegen de exchange dat deze # kan worden vervangen door 0 of n woorden.
Wanneer we * gebruiken, zeggen we tegen de exchange dat * slechts kan worden vervangen door 1 woord.
Daarom, wanneer een uitwisseling van het type Topic een bericht ontvangt, zal het de Routing Key van het bericht controleren, vergelijken met de Routing Keys van de wachtrijen en een kopie van dat bericht naar alle wachtrijen sturen waarin de Routing Keys (bericht en wachtrij) samenkomen.
Voorbeeld:
Routing Key van bericht: routing.key.test
In het bovenstaande geval wordt het bericht naar wachtrij 1, 3 en 4 gestuurd. Het wordt niet naar wachtrij 2 gestuurd omdat het patroon vereist dat er slechts één woord na “routing.” staat en in ons geval zijn dat er 2.
Headers
Voordat we deze uitwisseling gaan uitleggen, is het nodig om te melden dat het mogelijk is om attributen in de header van een bericht te sturen (vergelijkbaar met de header van HTTP)
Headers uitwisseling is vergelijkbaar met Topic, maar in plaats van het vergelijken van Routing Key, vergelijkt het de attributen aanwezig in de header van het bericht met de attributen aanwezig in de argumenten gedefinieerd wanneer we een wachtrij binden in de uitwisseling.
Het is mogelijk om een regel te maken voor deze validatie.
Om deze regel te maken, gebruiken we het argument met de “x-match” sleutel met 2 mogelijke waarden: any en all.
Any is vergelijkbaar met || van een voorwaarde en all is vergelijkbaar met &&.
Exemplaar:
Wanneer we een bericht verzenden met het argument {“key1”: “value1”} in de header ervan, zal dit bericht alleen naar de “headers.queue1”-wachtrij worden geleid omdat het attribuut {“key1”: “value1”} in de argumenten voor deze wachtrij.
In het geval van de “headers.queue2” wachtrij, zal de uitwisseling valideren of de berichtkop de 2 argumenten bevat omdat de “x-match” is ingesteld op all. Daarom zal de uitwisseling het {“key2”: “value2”} argument in de berichtkop en zal geen kopie van dat bericht naar die wachtrij sturen.
Ik hoop dat deze snelle uitleg je kan helpen om RabbitMQ Uitwisselingen te begrijpen.
Om meer te weten te komen: https://www.rabbitmq.com/tutorials/amqp-concepts.html
Neem deel aan onze community Slack en lees onze wekelijkse Faun topics ⬇