Exchange ā wisselaar of uitwisselingspunt. Hierin worden berichten verzonden. Exchange verdeelt het bericht in ƩƩn of meerdere wachtrijen. Hij routet berichten naar de wachtrij op basis van de gemaakte verbindingen (bindings) tussen hem en de wachtrij.
Exchange niet is . Vanuit schaalbaarheidsoptiek exchange ā dit is een string (link naar de module met code waarin de routeringslogica ligt) in de ingebouwde database . 1 duizend wisselaars verbruiken slechts 1MB geheugen.
Inhoudsopgave
- RabbitMQ. Deel 3. Laten we kijken naar Queues en Bindings
- RabbitMQ. Deel 4. Laten we kijken wat berichten en frames zijn
- RabbitMQ. Deel 5. Prestatie van het publiceren en consumeren van berichten
- RabbitMQ. Deel 6. Overzicht van de modules Federation en Shovel
- RabbitMQ. Deel 7. Gedetailleerd over Connection en Channel
- RabbitMQ. Deel 8. RabbitMQ in .NET
- RabbitMQ. Deel 9. Monitoring
Direct Exchange
Direct exchange ā wordt gebruikt wanneer het nodig is om een bericht aan specifieke wachtrijen te bezorgen. Het bericht wordt gepubliceerd in de wisselaar met een bepaalde routeringssleutel en komt in alle wachtrijen die met deze wisselaar zijn verbonden met dezelfde routeringssleutel. Routeringssleutel ā dit is een string. Het zoeken naar overeenstemming gebeurt door middel van stringvergelijkingen.
Grafische weergave van de berichtenstroom:

In rabbitmq er is het begrip standaardwisselaar. Dit is direct exchange zonder naam. Als de standaardwisselaar wordt gebruikt, zal het bericht worden gerouteerd naar de wachtrij met de naam gelijk aan de routeringssleutel van het bericht.
Topic Exchange
Topic exchange ā soortgelijk direct exchange biedt de mogelijkheid om geselecteerde routering uit te voeren door de routeringssleutel te vergelijken. Maar in dit geval wordt de sleutel ingesteld door een patroon. Bij het maken van een patroon worden 0 ƩƩn of meer woorden (letters AZ en az en cijfers 0-9), gescheiden door punten, evenals symbolen * en #.
*ā kan worden vervangen door precies1woord#ā kan worden vervangen door0ƩƩn of meer woorden
Grafische weergave van de berichtenstroom:

Beginnend vanaf versie RabbitMQ 2.4.0 de routeringsalgoritme voor topic exchange werkte tot 145 tien keer sneller. Ze hebben dit bereikt door de aanpak , die de representatie van patronen in de vorm van een boomstructuur inhoudt. Bijvoorbeeld de patronen a.b.c, a.*.b.c, a.#.c en b.b.c zullen als volgt worden gepresenteerd:

Het zoeken naar overeenstemming met het patroon begint vanaf de wortel en gaat van boven naar beneden.
Kenmerken:
- het gebruik van deze wisselaar kan een goede keuze zijn voor mogelijke toekomstige ontwikkeling van de applicatie, aangezien patronen altijd kunnen worden geconfigureerd om het bericht op vergelijkbare wijze te publiceren.
direct exchangeoffanout exchange - patronen die gebruiken
*veel sneller, dan patronen die gebruiken#. topic exchangetragerdirect exchange
Fanout Exchange
Fanout exchange ā alle berichten worden afgeleverd aan alle wachtrijen zelfs als er een routeringssleutel in het bericht is opgegeven.
Kenmerken:
RabbitMQwerkt niet met routeringssleutels en patronen wat een positieve invloed heeft op de prestaties. Dit is de snelsteexchange;- alle gebruikers moeten in staat zijn om alle berichten te verwerken;
Grafische weergave van de berichtenstroom:

Headers Exchange
Headers exchange stelt berichten in staat om naar gerelateerde wachtrijen te worden gestuurd op basis van het vergelijken van paren (sleutel, waarde) eigenschappen headers bindingen en een soortgelijke eigenschap van het bericht. headers is Dictionary<sleutel, waarde>.
Als een speciale sleutel aan de woordenlijst wordt toegevoegd x-match met de waarde any, dan wordt het bericht gerouteerd bij gedeeltelijke overeenstemming van paren (sleutel, waarde). Dit gedrag is vergelijkbaar met de operator or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");Standaard bevat de sleutel x-match de waarde all. Dit betekent dat het bericht wordt gerouteerd bij volledige overeenstemming van paren (sleutel, waarde). Dit gedrag is vergelijkbaar met de operator en.
Grafische weergave van de berichtenstroom:

Kenmerken:
- extra flexibiliteit
- aanvullende rekenkosten. Alle paren (sleutel, waarde) van het attribuut
headersmoeten op naam van de sleutel worden gesorteerd vóór het berekenen van de routering van het bericht. Langzamer dan andere soorten exchange.
Consistent-Hashing Exchange
Deze exchange is en niet ingebouwd in RabbitMQ.
Consistent-hashing exchange (exchange met consistente hashing) ā wordt gebruikt wanneer er verschillende wachtrijen zijn die potentiĆ«le ontvangers van het bericht zijn, en wanneer de belasting tussen hen moet worden gebalanceerd. De verbinding van het bericht met de wachtrij gebeurt op basis van gewicht (een voorwaardelijke tekenreekswaarde van 0 - n).
Equivalent gewicht van de wachtrijen ā geeft aan dat elk van de wachtrijen ongeveer hetzelfde aantal berichten zal ontvangen (elk bericht zal slechts in ƩƩn wachtrij worden geplaatst). Er is geen volledige garantie voor een gelijkmatige verdeling van berichten Hash.
Grafische weergave van de berichtenstroom:

wordt berekend op basis van de routeringssleutel of eigenschap van het bericht. Als alle gepubliceerde berichten verschillende routeringssleutels hadden of headers , dan zal de verdeling op basis van gewicht plaatsvinden. Anders zal de routeringssleutel of headersMoet helpen wanneer de bandbreedte van de consument meer moet groeien dan de oplossing met meerdere consumenten die dezelfde wachtrij gebruiken. headers.
Combinatie van exchanges (E2E)
Het gedrag van alle exchanges kan worden gecombineerd met behulp van verbinding
Exchange-to-Exchange (de combinatie van exchanges valt niet onder de specificatie . Dit is een protocoluitbreiding aan de zijde van AMQPDoor middel van RabbitMQ).
Grafische weergave van de berichtenstroom:

E2E E2E we kunnen de juiste schaalbare configuratie vinden die voldoet aan zowel de huidige als de groeiende eisen.
Exchange creƫren
Het creƫren van een exchange gebeurt via een synchronisatie RPC verzoek aan de server. Het verzoek wordt gedaan met behulp van de methode Exchange.Declare, aangeroepen met de parameters:
- naam van de exchange
- type exchange
- andere parameters
Voorbeeld van aanmaak exchange met behulp van :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchangeā de naam van de exchange die we willen creĆ«ren. De naam moet uniek zijntypeā type exchangeduurableā als ingesteldtrue, danexchangezal permanent zijn. Het zal op de schijf worden opgeslagen en kan een server/broker herstart overleven. Als de waardefalse, danexchangetijdelijk is, wordt het verwijderd wanneer de server/broker opnieuw opstartautoDeleteā automatische verwijdering.Exchangehet wordt verwijderd wanneer alle gerelateerde wachtrijen worden verwijderdargumentsā optionele argumenten. Meestal worden via argumentenalternative exchange(alternatieve exchange). Als een bericht niet via de oorspronkelijke route kan, kan het naar de alternatieve exchange worden gestuurd voor routering via een andere weg.

Als het creƫren exchange mogelijk, zal de server een synchronisatie RPC op de kritiek van het gebruik van advertentieblokker als middel om persoonlijke conflicten op te lossen en druk uit te oefenen op gebruikers, verklaarde ontwikkelaar dimisa Exchange.DeclareOkverzenden. Als het creƫren onmogelijk is (er was een fout bij het verzoek Exchange.Declare), dan zal de kanaal sluiten door de server met behulp van een asynchrone opdracht Channel.Close en de client ontvangt een uitzondering , die de foutcode en de omschrijving zal bevatten.
De exchange moet zijn aangemaakt voordat berichten worden gepubliceerd. Als je een bericht publiceert naar een niet-bestaande exchange ā RabbitMQ zult het stil worden verwijderd.
Exchange creƫren via de grafische interface
Ga naar het beheerderspaneel RabbitMQ onder gebruikersnaam gast; (username: gast; en password: gast;). Let op dat de gebruiker gast; alleen vanaf de lokale host kan verbinden. Laten we nu naar het tabblad Exchanges gaan en op de Add a new exchange. Vul de eigenschappen in:

Het merendeel van de eigenschappen is hierboven beschreven. Hier moeten we opmerken dat als je Intern, de exchange alleen gebruikt kan worden voor E2E. Producer kan geen berichten naar zo'n exchange sturen.
Conclusie
Bij het ontwikkelen van een systeem is het handig de topologie te beschrijven met behulp van een grafiek. Maar voordat je begint met het bouwen van de grafiek, is het het beste om de drukke paden te identificeren, aangezien zij hogere doorvoer vereisen. (prestaties). Vervolgens kan het verkeer gecategoriseerd worden. En pas daarna kan begonnen worden met de opbouw.
Als er in de gebouwde grafiek een eindige hoeveelheid routeringssleutels bestaat, dan is het de moeite waard om naar meerdere fanout exchange, die 1:1 gekoppeld zijn aan de routeringssleutel, te kijken. Onthoud dat fanout exchange de snelste is.
Als het aantal routes naar oneindigheid neigt, is het de moeite waard om aandacht te besteden aan topic exchange of, als het sjabloon niet nodig is, kan men kiezen voor directe uitwisseling, aangezien deze sneller is. topic exchange.
Combinaties van verschillende exchange moeten helpen om de juiste schaalbare configuratie, die voldoet aan zowel de huidige als de groeiende vereisten van het systeem, te vinden.
Aantal exchange en wachtrijen moet minimaal zijn in vergelijking met het aantal routes.
In het volgende artikel beginnen we dieper in te gaan op Queues en Bindings.
Links
Bron: habr.com
