Exchange - veksler eller byttepunkt. Meldinger sendes til den. Exchangedistribuerer 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 Erlang prosess. Av skalerbarhetsgrunner exchange er en streng (en lenke til modulen med koden der rutinglogikken er) i den innebygde databasen hukommelsestap. 1 tusen vekslere bruker bare 1 MB minne.
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øyaktig 1 ordet
# - kan erstattes av 0 eller 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 prøv implementering, 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 exchange eller fanout exchange
maler som bruker *mye raskereenn maler som bruker #.
topic exchange langsommere direct 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 raskeste exchange;
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 headers må sorteres etter nøkkelnavn før du beregner verdier for meldingsruting. Tregere enn andre utvekslingstyper.
Konsekvent hashing-utveksling
Denne veksleren er plugg inn и 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:
exchange — navnet på veksleren vi ønsker å lage. Navnet må være unikt
type — type veksler
durable - hvis installert truederetter exchange vil være permanent. Den vil bli lagret på disk og vil kunne overleve en omstart av server/megler. Hvis verdien falsederetter exchange er midlertidig og vil bli fjernet når serveren/megleren startes på nytt
autoDelete - automatisk fjerning. Exchange vil bli slettet når alle tilknyttede køer er slettet
arguments er valgfrie argumenter. Oftest gjennom argumentene satt alternative 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 exchangekanskje, 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 OperationInterruptedException, 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 ruting 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.