RabbitMQ. Del 2. Forstå utvekslinger

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 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.

innholdsfortegnelsen

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. Del 2. Forstå utvekslinger

В 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:

RabbitMQ. Del 2. Forstå utvekslinger

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:

RabbitMQ. Del 2. Forstå utvekslinger

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:

  • RabbitMQ fungerer 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:

RabbitMQ. Del 2. Forstå utvekslinger

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:

RabbitMQ. Del 2. Forstå utvekslinger

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:

RabbitMQ. Del 2. Forstå utvekslinger

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:

RabbitMQ. Del 2. Forstå utvekslinger

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 RabbitMQ.Client:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • 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.

RabbitMQ. Del 2. Forstå utvekslinger

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 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:

RabbitMQ. Del 2. Forstå utvekslinger

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.

referanser

Kilde: www.habr.com

Legg til en kommentar