Exchange - veksler eller byttepunkt. Meldinger sendes til den. Exchange distribuerer melding i en eller flere køer. Han ruter meldinger til en kø basert på de opprettede forbindelsene (bindings) mellom ham og køen.
Exchange er ikke . Av skalerbarhetsgrunner exchange er en streng (en lenke til modulen med koden der rutinglogikken er) i den innebygde databasen . 1 tusen vekslere bruker bare 1 MB minne.
innholdsfortegnelsen
- RabbitMQ. Del 3. Forstå køer og bindinger
- RabbitMQ. Del 4. Å håndtere hva som er meldinger og rammer
- RabbitMQ. Del 5: Publisering og forbruk av meldingsytelse
- RabbitMQ. Del 6. Oversikt over forbunds- og spademodulene
- RabbitMQ. Del 7. Detaljer om Connection og Chanel
- RabbitMQ. Del 8. RabbitMQ i .NET
- RabbitMQ. Del 9. Overvåking
Direkte utveksling
Direct exchange - brukes ved behov levere melding til bestemte køer. Meldingen publiseres til veksleren med en spesifikk rutenøkkel og kommer inn i alle køer som er koblet til denne veksleren med en lignende rutenøkkel. Rutingnøkkelen er en streng. Matching gjøres ved hjelp av sjekke strenger for ekvivalens.
Grafisk representasjon av meldingsflyt:

В rabbitmq det er et konsept standard veksler. Den direct exchange ingen navn. Hvis standardveksleren brukes, vil meldingen bli rutet til en kø med navn lik meldingsrutingsnøkkel.
Emneutveksling
Topic exchange - lignende direct exchange muliggjør selektiv ruting ved å sammenligne rutingnøkkelen. Men i dette tilfellet er nøkkelen gitt i henhold til malen. Når du lager en mal, bruk 0 eller flere ord (bokstaver AZ и az og tall 0-9), atskilt med en prikk, samt symboler * и #.
*- kan erstattes av nøyaktig1ordet#- kan erstattes av0eller flere ord
Grafisk representasjon av meldingsflyt:

Siden versjon RabbitMQ 2.4.0 rutingalgoritme for topic exchange begynte å jobbe til 145 ganger raskere. De oppnådde dette ved å implementere tilnærmingen , som innebærer representasjon av maler som en trestruktur. For eksempel maler a.b.c, a.*.b.c, a.#.c и b.b.c vil bli representert av følgende struktur:

Mønstermatching søkes fra roten og går fra topp til bunn.
Funksjoner:
- bruken av denne veksleren kan bli et godt valg for mulig fremtidig apputvikling, fordi maler kan alltid tilpasses slik at meldingen publiseres på samme måte
direct exchangeellerfanout exchange - maler som bruker
*mye raskereenn maler som bruker#. topic exchangelangsommeredirect exchange
Fanout Exchange
Fanout exchange - alle meldinger leveres til alle køer selv om en rutenøkkel er spesifisert i meldingen.
Funksjoner:
RabbitMQfungerer ikke med rutenøkler og maler som har en positiv effekt på ytelsen. Dette er den raskesteexchange;- alle forbrukere må kunne behandle alle meldinger;
Grafisk representasjon av meldingsflyt:

Overskriftsutveksling
Headers exchange - ruter meldinger til tilhørende køer basert på sammenligning av (nøkkel, verdi) egenskapspar headers bindinger og lignende meldingsegenskaper. headers er en Dictionary<ключ, значение>.
Hvis du legger til en spesiell nøkkel i ordboken x-match med mening any, så rutes meldingen hvis parene (nøkkel, verdi) delvis samsvarer. Denne oppførselen ligner på operatøren or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");Standard nøkkel x-match inneholder en verdi all. Dette betyr at meldingen rutes når parene (nøkkel, verdi) stemmer helt overens. Denne oppførselen ligner på operatøren and.
Grafisk representasjon av meldingsflyt:

Funksjoner:
- ekstra fleksibilitet
- ekstra beregningsoverhead. Alle parene (nøkkel, verdi) av attributtet
headersmå sorteres etter nøkkelnavn før du beregner verdier for meldingsruting. Tregere enn andre utvekslingstyper.
Konsekvent hashing-utveksling
Denne veksleren er и ikke innebygd в RabbitMQ.
Consistent-hashing exchange (hash-konsistent utveksling) - brukes når det er flere køer som er potensielle mottakere av en melding og når du trenger å laste balanse mellom dem. Meldingen er knyttet til køen etter vekt (en betinget strengverdi fra 0 - n).
Tilsvarende vekt av køer - indikerer at hver kø vil motta omtrent like mye meldinger (hver melding vil bli plassert i kun én kø). Det er ingen fullstendig garanti for enhetlig distribusjon av meldinger.
Grafisk representasjon av meldingsflyt:

Hash beregnet basert på rutenøkkel eller egenskap headers meldinger. Hvis alle publiserte meldinger hadde forskjellige rutenøkler eller headers, da vil fordelingen skje etter vekt. Ellers vil rutenøkkelen bli brukt, eller headers.
Bør hjelpe når forbrukergjennomstrømningen må vokse høyere enn en løsning med flere forbrukere som bruker én enkelt kø.
Kombinasjon av vekslere (E2E)
Oppførselen til alle vekslere kan kombineres ved hjelp av kommunikasjon Exchange-to-Exchange (kombinasjon av vekslere er ikke inkludert i spesifikasjonen AMQP. Dette er en protokollutvidelse fra siden RabbitMQ).
Grafisk representasjon av meldingsflyt:

På bekostning av E2E vi kan finne den riktige skalerbare konfigurasjonen som oppfyller både gjeldende og økende krav.
Opprett en utveksling
Opprettelsen av en veksler skjer ved bruk av synkron RPC forespørsel til serveren. Forespørselen gjøres ved hjelp av metoden Exchange.Declare, kalt med parametere:
- vekslerens navn
- veksler type
- andre muligheter
Skapelseseksempel exchange ved hjelp av :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchange— navnet på veksleren vi ønsker å lage. Navnet må være unikttype— type vekslerdurable- hvis installerttruederetterexchangevil være permanent. Den vil bli lagret på disk og vil kunne overleve en omstart av server/megler. Hvis verdienfalsederetterexchangeer midlertidig og vil bli fjernet når serveren/megleren startes på nyttautoDelete- automatisk fjerning.Exchangevil bli slettet når alle tilknyttede køer er slettetargumentser valgfrie argumenter. Oftest gjennom argumentene sattalternative exchange(alternativ veksler). Hvis en melding ikke kan reise langs den opprinnelige ruten, kan den sendes til en alternativ veksler for å bli rutet langs en annen bane.

Hvis skapelsen exchange kanskje, så vil serveren sende klienten en synkron RPC svar Exchange.DeclareOk. Hvis skapelsen er umulig (forespørselen ble avslått Exchange.Declare), deretter kanalen lukkes server ved å bruke en asynkron kommando Channel.Close og klienten vil få unntak , som vil inneholde feilkoden og beskrivelsen.
En veksler må opprettes før kontering. Hvis du publiserer en melding til en ikke-eksisterende veksler - RabbitMQ fjern den stille.
Opprette Exchange via GUI
Gå til administrasjonspanelet RabbitMQ under bruker guest (brukernavn: guest og passord: guest). Vær oppmerksom på at brukeren guest kan bare koble til fra localhost. La oss nå gå til fanen Exchanges og klikk på Add a new exchange. Fyll ut egenskapene:

De fleste eiendommene er beskrevet ovenfor. Her merker vi at hvis vi setter Internal, da kan utvekslingen kun brukes til E2E. Producer vil ikke kunne sende meldinger til en slik sentral.
Konklusjon
Når man utvikler et system, er det praktisk å beskrive topologien ved hjelp av en graf. Men før du begynner å bygge en graf, er det verdt å fremheve stiene med høy trafikk, fordi det er de som krever høyere gjennomstrømning (opptreden). Deretter kan du klassifisere trafikken. Og så begynne å bygge.
Hvis det finnes i den konstruerte grafen begrenset sett rutenøkler, så er det verdt å se mot flere fanout exchange, som er 1:1 relatert til rutenøkkelen. Husk at fanout exchange den raskeste.
Hvis antall ruter har en tendens til det uendelige, det er verdt å ta hensyn til topic exchange eller, hvis malen ikke er nødvendig, kan du velge direct exchnge, fordi han er raskere topic exchange.
Kombinasjoner av ulike exchange skal hjelpe deg med å finne den rette. skalerbar konfigurasjon, som oppfyller både gjeldende og økende systemkrav.
Nummer exchange og køene skal være minimale i forhold til antall ruter.
I den neste artikkelen vil vi begynne å forstå køer og bindinger mer detaljert.
referanser
Kilde: www.habr.com
