Exchange - veksler eller byttepunkt. Der sendes beskeder til den. Exchangedistribuerer 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.
RabbitMQ. Del 4. At beskæftige sig med, hvad der er budskaber og rammer
RabbitMQ. Del 5: Udgivelse og forbrug af budskabsydelse
RabbitMQ. Del 6. Oversigt over forbunds- og skovlmodulerne
RabbitMQ. Del 7. Detaljer om Connection og Chanel
RabbitMQ. Del 8. RabbitMQ i .NET
RabbitMQ. Del 9. Overvågning
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 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:
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:
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:
RabbitMQvirker 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:
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:
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:
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:
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:
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.
Hvis skabelsen exchangemå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:
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.