Utveksling — en byttebørs eller byttepunkt. Meldinger sendes til den. Utveksling fordeler meldingen til en eller flere køer. Den ruter meldingene til køen basert på de etablerte forbindelsene (bindings) mellom den og køen.
Utveksling er ikke . Av skaleringsmessige hensyn exchange — det er en streng (lenke til modulen med koden der rutingen ligger) i den innebygde databasen . 1 000 byttebørser vil bruke bare 1 MB minne.
Innholdsfortegnelse
- RabbitMQ. Del 3. Vi går gjennom Køer og Bindinger
- RabbitMQ. Del 5. Ytelse ved publisering og forbruk av meldinger
- RabbitMQ. Del 6. Oversikt over modulene Federation og Shovel
- RabbitMQ. Del 7. Detaljert om Connection og Channel
- RabbitMQ. Del 8. RabbitMQ i .NET
- RabbitMQ. Del 9. Overvåking
- Midlertidige køer
Direkte utveksling
Direkte utveksling — brukes når det er nødvendig å levere meldinger til bestemte køer. Meldingen publiseres i byttebørsen med en bestemt ruteringsnøkkel og går til alle køene som er koblet til denne byttebørsen med en tilsvarende ruteringsnøkkel. Ruteringsnøkkelen er en streng. Samsvaret sjekkes ved å sammenligne strenger for likhet.
Grafisk representasjon av meldingsflyt:

I rabbitmq det finnes et begrep standard byttebørs. This direkte utveksling uten navn. Hvis standard byttebørs brukes, vil meldingen bli rutet til køen med navnet lik ruteringsnøkkelen for meldingen.
Emnet Exchange
Emneutveksling – tilsvarende direkte utveksling muliggjør selektiv ruting ved å sammenligne ruteringsnøkkelen. Men i dette tilfellet settes nøkkelen ved hjelp av et mønster. Når man lager et mønster brukes 0 to eller flere ord (bokstaver AZ og az og tall 0-9), delt med punktum, samt tegn * og #.
*— kan erstattes med nøyaktig1ordet#— kan erstattes med0to eller flere ord
Grafisk representasjon av meldingsflyt:

Fra versjon RabbitMQ 2.4.0 ble rutingsalgoritmen for emneutveksling mye raskere. De oppnådde dette ved å implementere tilnærmingen 145 trie-implementasjon a.b.c a.*.b.c, a.#.c, b.b.c og bli representert i følgende struktur: Samsvaret med mønsteret sjekkes fra roten og beveger seg nedenfra.

bruken av denne byttebørsen kan bli
Funksjoner:
- et godt valg for mulige fremtidige utviklinger av applikasjonen , da mønstrene alltid kan justeres slik at meldingen publiseres på samme måte somfanout exchange
direkte utvekslingellermønstre som bruker - mye raskere
*, enn mønstre som brukerlangsomere#. emneutvekslingFanout Exchangedirekte utveksling
Fanout exchange
alle meldinger blir levert til alle køer – selv om meldingen har en ruteringsnøkkel. fungerer ikke med ruteringsnøkler og mønstre.
Funksjoner:
RabbitMQне работает с ключами маршрутизации и шаблонами som er positivt for ytelsen. Dette er den raskesteexchange;- alle forbrukere må kunne behandle alle meldinger;
Grafisk representasjon av meldingsflyt:

Headers Exchange
Headers exchange — sender meldinger til tilknyttede køer basert på sammenligning av par (nøkkel, verdi) egenskapen headers bindinger og lignende egenskaper ved meldingen. headers RabbitMQ. Del 1. Introduksjon. Erlang, AMQP og RPC Dictionary.
Hvis det legges til en spesialnøkkel i ordboken x-match med verdien any, vil meldingen bli rutet ved delvis samsvar av par (nøkkel, verdi). Denne oppførselen ligner på operatoren eller.
var bindingArguments = new Dictinary();
bindingArguments.add("x-match", "any");Som standard inneholder nøkkelen x-match verdien all. Dette betyr at meldingen blir rutet ved fullstendig samsvar av par (nøkkel, verdi). Denne oppførselen ligner på operatoren og.
Grafisk representasjon av meldingsflyt:

Funksjoner:
- ekstra fleksibilitet
- ytterligere beregningskostnader. Alle par (nøkkel, verdi) egenskapen
headersmå sorteres etter nøkkelens navn før beregning av rutingsverdiene for meldingen. Langsommere enn andre typer exchange.
Consistent-Hashing Exchange
Denne exchange er og ikke innebygd i RabbitMQ.
Consistent-hashing exchange (exchange med konsistent hashing) – brukes når det finnes flere køer som er potensielle mottakere av meldingen, og når det er nødvendig å balansere belastningen mellom dem. Koblingen av meldingen til køen skjer basert på vekt (et betinget strengverdi fra 0 - n).
Ekvivalent vekt av køene – sier at omtrent like mange meldinger vil komme til hver kø (hver melding vil bli plassert i kun én kø). Det er ingen full garanti for jevn distribusjon av meldinger Hash.
Grafisk representasjon av meldingsflyt:

beregnes basert på rutingsnøkkelen eller egenskapen til meldingen. Hvis alle publiserte meldinger hadde forskjellige rutingsnøkler eller headers , vil distribusjonen skje basert på vekt. Ellers vil rutingsnøkkelen bli brukt, eller headersBør hjelpe når forbrukerens båndbredde trenger å vokse mer enn løsningen med flere forbrukere som bruker én kø. headers.
Kombinering av exchange (E2E)
Oppførselen til alle exchange kan kombineres ved hjelp av forbindelse
Exchange-to-Exchange (kombinering av exchange er ikke en del av spesifikasjonen . Dette er en utvidelse av protokollen fra AMQPTakket være RabbitMQ).
Grafisk representasjon av meldingsflyt:

E2E E2E Vi kan finne den riktige skalerbare konfigurasjonen som møter både nåværende og voksende behov.
Opprettelse av Exchange
Oppretting av en utveksling skjer ved hjelp av synkron RPC forespørsel til serveren. Forespørselen gjøres ved hjelp av metoden Exchange.Declare, som kalles med parametere:
- navnet på utvekslingen
- utvekslingstype
- andre parametere
Eksempel på opprettelse exchange using :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchange— navnet på utvekslingen vi ønsker å opprette. Navnet må være unikttype— utvekslingstypenbeholder sin tilstand— hvis angitttrue, såexchangevil være permanent. Den vil bli lagret på disken og kan overleve en omstart av serveren/broker. Hvis verdienfalse, såexchangeer midlertidig og vil bli slettet når serveren/broker er omstartet, får den evnen— automatisk sletting.Utvekslingvil bli slettet når alle relaterte køer er slettetarguments— valgfrie argumenter. Ofte angis via argumentenealternative exchange(alternativ utveksling). Hvis meldingen ikke kan gå gjennom den opprinnelige ruten, kan den sendes til alternativ utveksling for ruting gjennom en annen vei.

Hvis opprettelsen exchange is possible, then the server will send a synchronous RPC response Exchange.DeclareOk. Hvis opprettelsen is not possible (the request was denied Exchange.Declare), then the channel will close av serveren ved hjelp av asynkrone kommandoer Channel.Close and the client will receive an exception , which will contain the error code and its description.
Utvekslingen må være opprettet før publisering av meldinger. Hvis du publiserer en melding til en ikke-eksisterende utveksling — RabbitMQ vil den bli stille slettet.
Oppretting av Exchange via grafisk grensesnitt
Log in to the admin panel RabbitMQ as the user gjest (username: gjest and password: gjest). Note that the user gjest can only connect from the local host. Now let's go to the Utvekslinger tab and click on Legg til en ny utveksling. Fill in the properties:

De fleste egenskapene er beskrevet ovenfor. Her merker vi at hvis du angir Intern, kan utvekslingen bare brukes for E2E. Produsent vil ikke kunne sende meldinger til en slik utveksling.
Konklusjon
Når du utvikler systemet, er det praktisk å beskrive topologien ved hjelp av en graf. Men før du begynner å bygge grafen, bør du skille ut ruter med høy trafikk, siden det er de som krever høyere kapasitet (ytelse). Deretter kan du klassifisere trafikken. Og så kan du begynne å bygge.
Hvis det i den bygde grafen finnes endelig mengde ruteringsnøkler, bør du se etter flere mønstre som bruker, som er 1:1 knyttet til ruteringsnøkkelen. Husk at mønstre som bruker den er den raskeste.
Hvis antall ruter tenderer mot uendelig, bør du være oppmerksom på emneutveksling eller, hvis mønsteret ikke er nødvendig, kan du velge direct exchange, da den er raskere emneutveksling.
Kombinasjoner av forskjellige exchange bør hjelpe med å finne den riktige skalerbare konfigurasjonen, som møter både nåværende og voksende krav fra systemet.
Antall exchange og køer bør være minimale i forhold til antallet af ruter.
I den næste artikel begynder vi at dykke dybere ned i Queues og Bindings.
Lenker
Kilde: habr.com
