RabbitMQ. Del 2. Forståelse af udvekslinger

Exchange - veksler eller byttepunkt. Der sendes beskeder til den. Exchange distribuerer budskabet i en eller flere køer. Han dirigerer beskeder til en kø baseret på oprettede links (bindings) mellem den og køen.

Exchange er ikke Erlang proces. Af hensyn til skalerbarheden exchange er en streng (et link til modulet med koden, hvor routinglogikken er) i den indlejrede database hukommelsestab. 1 tusinde vekslere vil kun forbruge 1 MB hukommelse.

indholdsfortegnelse

Direkte udveksling

Direct exchange - bruges efter behov levere en besked til bestemte køer. Meddelelsen offentliggøres til veksleren med en specifik rutenøgle og kommer ind i alle køer, der er knyttet til denne veksler med en lignende routingnøgle. Routing-nøglen er en streng. Matching udføres vha kontrollere strenge for ligestilling.

Grafisk repræsentation af meddelelsesstrømmen:

RabbitMQ. Del 2. Forståelse af udvekslinger

В rabbitmq der er et koncept standardveksler. Det direct exchange intet navn. Hvis standardveksleren bruges, vil meddelelsen blive dirigeret til en kø med et navn svarende til besked routing nøgle.

Emneudveksling

Topic exchange – lignende direct exchange muliggør selektiv routing ved at sammenligne routingnøglen. Men i dette tilfælde er nøglen givet efter skabelon. Når du opretter en skabelon, skal du bruge 0 eller flere ord (bogstaver AZ и az og tal 0-9), adskilt af en prik, samt symboler * и #.

  • * - kan erstattes af nøjagtigt 1 слово
  • # - kan erstattes af 0 eller flere ord

Grafisk repræsentation af meddelelsesstrømmen:

RabbitMQ. Del 2. Forståelse af udvekslinger

Starter fra version RabbitMQ 2.4.0 routing-algoritme til topic exchange begyndte at arbejde indtil 145 gange hurtigere. Det opnåede de ved at indføre en tilgang prøv implementering, hvilket indebærer repræsentationen af ​​skabeloner som en træstruktur. For eksempel skabeloner a.b.c, a.*.b.c, a.#.c и b.b.c vil blive repræsenteret af følgende struktur:

RabbitMQ. Del 2. Forståelse af udvekslinger

Søgningen efter at matche et mønster udføres startende fra roden og fortsætter fra top til bund.

Features:

  • brugen af ​​denne veksler kan blive et godt valg til eventuel fremtidig app-udvikling, fordi skabeloner kan altid tilpasses, så meddelelsen udgives på samme måde direct exchange eller fanout exchange
  • skabeloner, der bruger * meget hurtigereend skabeloner, der bruger #.
  • topic exchange langsommere direct exchange

Fanout Exchange

Fanout exchange - alle beskeder leveres til alle køer selvom der er angivet en rutenøgle i meddelelsen.

Features:

  • RabbitMQ virker ikke med routingnøgler og skabeloner hvilket har en positiv effekt på produktiviteten. Dette er den hurtigste exchange;
  • alle forbrugere skal kunne behandle alle meddelelser;

Grafisk repræsentation af meddelelsesstrømmen:

RabbitMQ. Del 2. Forståelse af udvekslinger

Udveksling af overskrifter

Headers exchange - dirigerer beskeder til relaterede køer baseret på en sammenligning af par af (nøgle, værdi) egenskaber headers bindinger og lignende meddelelsesegenskaber. headers er en Dictionary<ключ, значение>.

Hvis du tilføjer en særlig nøgle til ordbogen x-match med betydningen any, så rutes meddelelsen, hvis parrene (nøgle, værdi) delvist matcher. Denne adfærd ligner operatøren or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

Standardtast x-match indeholder en værdi all. Det betyder, at beskeden dirigeres, når parrene (nøgle, værdi) matcher fuldstændigt. Denne adfærd ligner operatøren and.

Grafisk repræsentation af meddelelsesstrømmen:

RabbitMQ. Del 2. Forståelse af udvekslinger

Features:

  • ekstra fleksibilitet
  • yderligere beregningsmæssig overhead. Alle par (nøgle, værdi) af attributten headers skal sorteres efter nøglenavn, før meddelelsesroutingværdier beregnes. Langsommere end andre udvekslingstyper.

Konsekvent hashing-udveksling

Denne veksler er plugin и ikke indbygget в RabbitMQ.

Consistent-hashing exchange (udveksling med konsekvent hashing) - bruges, når der er flere køer, der er potentielle modtagere af en besked, og når du skal balancere belastningen mellem dem. Meddelelsen er knyttet til køen efter vægt (en betinget strengværdi fra 0 - n).

Tilsvarende vægt af køer - angiver, at hver kø vil modtage omtrent det samme beløb beskeder (hver besked vil kun blive sat i én kø). Der er ingen fuldstændig garanti for ensartet distribution af beskeder.

Grafisk repræsentation af meddelelsesstrømmen:

RabbitMQ. Del 2. Forståelse af udvekslinger

Hash beregnes ud fra routingnøgle eller egenskab headers Beskeder. Hvis alle offentliggjorte meddelelser havde forskellige routingnøgler, eller headers, så vil fordelingen ske efter vægt. Ellers vil routing-nøglen blive brugt, eller headers.

Bør hjælpe, når forbrugergennemstrømningen skal vokse højere end en løsning med flere forbrugere, der bruger en enkelt kø.

Kombination af vekslere (E2E)

Alle veksleres opførsel kan kombineres ved hjælp af kommunikation Exchange-to-Exchange (kombination af vekslere er ikke inkluderet i specifikationen AMQP. Dette er en protokoludvidelse fra siden RabbitMQ).

Grafisk repræsentation af meddelelsesstrømmen:

RabbitMQ. Del 2. Forståelse af udvekslinger

På grund E2E vi kan finde den rigtige skalerbare konfiguration, der opfylder både nuværende og voksende krav.

Opret en Exchange

Veksleren er oprettet ved hjælp af en synkron RPC anmodning til serveren. Anmodningen er lavet ved hjælp af metoden Exchange.Declarekaldet med parametre:

  • vekslerens navn
  • veksler type
  • andre muligheder

Eksempel på skabelse exchange ved hjælp af RabbitMQ.Client:

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

  • exchange - navnet på den veksler, som vi ønsker at oprette. Navnet skal være unikt
  • type - type veksler
  • durable - hvis installeret truederefter exchange vil være permanent. Det vil blive gemt på disken og vil være i stand til at overleve en server/mægler genstart. Hvis værdien falsederefter exchange er midlertidig og vil blive fjernet, når serveren/mægleren genstartes
  • autoDelete - automatisk sletning. Exchange slettes, når alle tilknyttede køer er slettet
  • arguments - valgfrie argumenter. Oftest specificerer de gennem argumenter alternative exchange (alternativ veksler). Hvis en besked ikke kan gå gennem den oprindelige rute, kan den sendes til en alternativ central for at blive dirigeret ad en anden vej.

RabbitMQ. Del 2. Forståelse af udvekslinger

Hvis skabelsen exchange måske, så sender serveren klienten en synkron RPC besvare Exchange.DeclareOk. Hvis skabelsen er umuligt (der var et afslag på anmodningen Exchange.Declare), At kanalen lukker server ved hjælp af en asynkron kommando Channel.Close og klienten får en undtagelse OperationInterruptedException, som vil indeholde fejlkoden og dens beskrivelse.

Der skal oprettes en veksler inden bogføring. Hvis du udgiver en besked til en ikke-eksisterende veksler - RabbitMQ fjern det lydløst.

Opret en Exchange GUI

Gå til administratorpanelet RabbitMQ under bruger guest (brugernavn: guest og adgangskode: guest). Bemærk venligst, at brugeren guest kan kun oprette forbindelse fra localhost. Lad os nu gå til fanen Exchanges og klik på Add a new exchange. Udfyld egenskaberne:

RabbitMQ. Del 2. Forståelse af udvekslinger

De fleste af ejendommene er beskrevet ovenfor. Her bemærker vi, at hvis vi sætter Internal, så kan udvekslingen kun bruges til E2E. Producer vil ikke være i stand til at sende beskeder til en sådan central.

Konklusion

Når man udvikler et system, er det praktisk at beskrive topologien routing ved hjælp af en graf. Men før du begynder at bygge en graf, er det værd at fremhæve stierne med høj trafik, fordi. de kræver højere gennemløb (ydeevne). Dernæst kan du klassificere trafikken. Og så begynde at bygge.

Hvis der i den konstruerede graf findes endeligt sæt routing nøgler, så er det værd at se mod flere fanout exchange, som er 1:1 relateret til routingnøglen. Huske på, at fanout exchange den hurtigste.

Hvis antallet af ruter har en tendens til det uendelige, det er værd at være opmærksom på topic exchange eller, hvis skabelonen ikke er nødvendig, så kan du vælge direct exchnge, fordi han er hurtigere topic exchange.

Kombinationer af forskellige exchange skal hjælpe dig med at finde den rigtige. skalerbar konfiguration, som opfylder både nuværende og voksende systemkrav.

Nummer exchange og køerne skal være minimale i forhold til antallet af ruter.

I den næste artikel vil vi begynde at forstå mere om køer og bindinger.

RЎSЃS <P "RєRё

Kilde: www.habr.com

Tilføj en kommentar