RabbitMQ. Del 2. Vi gÄr igenom Exchanges

Exchange — en vĂ€xelkurs eller utbyte. Meddelanden skickas dit. Exchange fördelar meddelandet till ett eller flera köer. Den ruttnar meddelanden till köer baserat pĂ„ de skapade kopplingarna (bindings) mellan den och kön.

Exchange inte Ă€r Erlang-process.. Av skalbarhetsskĂ€l exchange – Ă€r en strĂ€ng (lĂ€nk till modulen med logik för ruttnande) i den inbyggda databasen mnesia. 1 tusen vĂ€xlingsstĂ€llen kommer att konsumera endast 1 MB minne.

InnehÄllsförteckning

  • RabbitMQ. Del 1. Introduktion. Erlang, AMQP och RPC
  • RabbitMQ. Del 2. Vi gĂ„r igenom Exchanges
  • RabbitMQ. Del 3. Vi gĂ„r igenom Queues och Bindings
  • RabbitMQ. Del 4. LĂ„t oss förstĂ„ vad meddelanden och ramar Ă€r
  • RabbitMQ. Del 5. Prestanda för publicering och konsumtion av meddelanden
  • RabbitMQ. Del 6. Översikt av modulerna Federation och Shovel
  • RabbitMQ. Del 7. Detaljer om Connection och Channel
  • RabbitMQ. Del 8. RabbitMQ i .NET
  • RabbitMQ. Del 9. Övervakning

Direct Exchange

Direct exchange – anvĂ€nds nĂ€r du behöver leverera meddelanden till specifika köer.Meddelandet publiceras i vĂ€xelkursen med en specifik ruttningsnyckel och hamnar i alla köer som Ă€r kopplade till denna vĂ€xelkurs med samma ruttningsnyckel. Ruttningsnyckeln Ă€r en strĂ€ng.Sökningen av överensstĂ€mmelse görs genom att kontrollera strĂ€ngar för likhet..

En grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Vi gÄr igenom Exchanges

I rabbitmq finns begreppet standardvÀxel. Det Àr direct exchange utan namn. Om den standardvÀxeln anvÀnds kommer meddelandet att rutnas till en kö med namnet som Àr lika med ruttningsnyckeln för meddelandet..

Topic Exchange

Topic exchange – liknande direct exchange ger möjlighet till selektiv rutning genom att jĂ€mföra ruttningsnyckeln. Men i detta fall stĂ€lls nyckeln in enligt ett mönster.Vid skapandet av mönstret anvĂ€nds 0 eller fler ord (bokstĂ€ver AZ och az och siffror 0-9), Ă„tskilda med punkt, samt tecken * och #.

  • * — kan ersĂ€ttas med exakt 1 ordet
  • # — kan ersĂ€ttas med 0 eller fler ord.

En grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Vi gÄr igenom Exchanges

FrÄn och med versionen RabbitMQ 2.4.0 har rutningsalgoritmen för topic exchange blivit upp till 145 mycket snabbare. De uppnÄdde detta genom att implementera tillvÀgagÄngssÀttet trie implementation, vilket innebÀr att mönstren presenteras som en trÀstruktur. Exempel pÄ mönster a.b.c, a.*.b.c, a.#.c och b.b.c Àr strukturerade pÄ följande sÀtt:

RabbitMQ. Del 2. Vi gÄr igenom Exchanges

Sökningen av överensstÀmmelse med mönstret sker frÄn roten och följer uppifrÄn och ner.

Egenskaper:

  • anvĂ€ndning av denna vĂ€xel kan bli ett bra val för potentiell framtida utveckling av applikationen., eftersom mallarna alltid kan anpassas för att publicera meddelanden pĂ„ samma sĂ€tt direct exchange eller fanout-utbyte
  • mallar som anvĂ€nds * mycket snabbare, Ă€n mallar som anvĂ€nds #.
  • topic exchange lĂ„ngsammare direct exchange

Fanout-utbyte

Fanout-utbyte – alla meddelanden levereras till alla köer Ă€ven om meddelandet har en routning nyckel.

Egenskaper:

  • RabbitMQ fungerar inte med routning nycklar och mallar vilket positivt pĂ„verkar prestandan. Detta Ă€r det snabbaste exchange;
  • alla konsumenter mĂ„ste kunna hantera alla meddelanden;

En grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Vi gÄr igenom Exchanges

Headers-utbyte

Headers-utbyte — dirigerar meddelanden till relaterade köer baserat pĂ„ jĂ€mförelsen av par (nyckel, vĂ€rde) egenskap headers bindningar och motsvarande egenskap hos meddelandet. headers representerar Dictionary<nyckel, vĂ€rde>.

Om en speciell nyckel lÀggs till i ordboken x-match med vÀrdet any, sÄ dirigeras meddelandet vid delvis matchning av par (nyckel, vÀrde). Detta beteende Àr liknande operatören or.

var bindingArguments = new Dictionary<String, Object&gt();
bindingArguments.add("x-match", "any");

Som standard innehÄller nyckeln x-match vÀrdet all. Det innebÀr att meddelandet dirigeras vid fullstÀndig matchning av par (nyckel, vÀrde). Detta beteende liknar operatören och.

En grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Vi gÄr igenom Exchanges

Egenskaper:

  • extra flexibilitet
  • extra berĂ€kningsöverhead. Alla par (nyckel, vĂ€rde) i attributet headers mĂ„ste sorteras efter nyckelns namn innan vĂ€rdena för meddelandets dirigering berĂ€knas. LĂ„ngsammare Ă€n andra typer av utbyte.

Consistent-Hashing-utbyte

Detta utbyte Àr en plugin och Àr inte inbyggd pÄ RabbitMQ.

Consistent-hashing-utbyte (utbyte med konsekvent hashning) – anvĂ€nds nĂ€r det finns flera köer som potentiella mottagare av meddelandet, och nĂ€r det behövs för att balansera belastningen mellan dem. Kopplingen av meddelandet till kön sker baserat pĂ„ vikt (ett villkorligt strĂ€ngvĂ€rde frĂ„n 0 - n).

Den motsvarande vikten av köer antyder att varje kö kommer att fÄ ungefÀr lika mÄnga meddelanden (varje meddelande kommer att placeras endast i en kö). Det finns ingen fullstÀndig garanti för en jÀmn fördelning av meddelanden.

En grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Vi gÄr igenom Exchanges

Hash berÀknas baserat pÄ routning nyckeln eller egenskapen headers hos meddelandet. Om alla publicerade meddelanden hade olika routning nycklar eller headers, sÄ kommer fördelningen att ske baserat pÄ vikt. Annars kommer routning nyckeln att anvÀndas eller headers.

Ska hjÀlpa nÀr anvÀndarens bandbredd behöver vÀxa mer Àn en lösning med flera anvÀndare som anvÀnder en kö.

Kombinering av vÀxlare (E2E)

Beteendet hos alla vÀxlare kan kombineras genom kopplingar Exchange-to-Exchange (kombinering av vÀxlare ingÄr inte i specifikationen AMQP. Detta Àr en protokollutvidgning frÄn sidan av RabbitMQ).

En grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Vi gÄr igenom Exchanges

Genom E2E kan vi hitta den rÀtta skalbara konfigurationen som uppfyller bÄde nuvarande och vÀxande krav.

Skapande av Exchange

Skapandet av en vÀxlare sker genom en synkron RPC begÀran till servern. BegÀran görs genom metoden Exchange.Declare, som anropas med följande parametrar:

  • namn pĂ„ vĂ€xlaren
  • typ av vĂ€xlare
  • andra parametrar

Exempel pÄ skapande av exchange med hjÀlp av RabbitMQ.Client:

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

  • exchange — namnet pĂ„ vĂ€xlare som vi vill skapa. Namnet mĂ„ste vara unikt
  • typ — typ av vĂ€xlare
  • hĂ„llbar — om det stĂ€lls in true, sĂ„ exchange kommer det att vara bestĂ€ndigt. Det kommer att lagras pĂ„ disken och kan överleva en omstart av servern/mĂ€klaren. Om vĂ€rdet false, sĂ„ exchange Ă€r temporĂ€rt och kommer att tas bort nĂ€r servern/krĂ€ver en omstart
  • autoDelete — automatisk borttagning. Exchange kommer att tas bort nĂ€r alla relaterade köer tas bort
  • argument — valfria argument. Oftast anges alternativ vĂ€xlare (alternativ vĂ€xlare). Om ett meddelande inte kan gĂ„ genom den ursprungliga vĂ€gen kan det skickas till den alternativa vĂ€xlaren för routing pĂ„ ett annat sĂ€tt.

RabbitMQ. Del 2. Vi gÄr igenom Exchanges

Om skapandet exchange Àr möjligt, sÄ kommer servern att skicka ett synkront RPC svar Exchange.DeclareOk. Om skapandet Àr omöjligt (det har skett ett avslag pÄ begÀran Exchange.Declare), sÄ kanalen stÀngs av servern med hjÀlp av ett asynkront kommando Channel.Close och klienten fÄr ett undantag OperationInterruptedException, som kommer att innehÄlla felkoden och dess beskrivning.

En vĂ€xlare mĂ„ste skapa innan meddelanden publiceras. Om du publicerar ett meddelande till en icke-existerande vĂ€xlare — RabbitMQ tyst tas bort.

Skapande av Exchange via grafiskt grÀnssnitt

GÄ till administrationspanelen RabbitMQ under anvÀndaren guest (anvÀndarnamn: guest och lösenord: guest). Observera att anvÀndaren guest bara kan ansluta frÄn localhost. LÄt oss nu gÄ till fliken Exchanges och klicka pÄ LÀgg till en ny vÀxlare. Fyll i egenskaperna:

RabbitMQ. Del 2. Vi gÄr igenom Exchanges

Största delen av egenskaperna har beskrivits ovan. HÀr noterar vi att om man stÀller in Intern, sÄ kan utbytet endast anvÀndas för E2E. Producer kan inte skicka meddelanden till ett sÄdant utbyte.

Slutsats

Vid utvecklingen av systemet Àr det bekvÀmt att beskriva topologin för rutning med hjÀlp av en graf. Men innan man börjar bygga grafen bör man identifiera vÀgar med hög trafik, eftersom det Àr dessa som krÀver högre bandbredd (prestanda). DÀrefter kan trafiken klassificeras. Och först dÄ kan man börja bygga.

Om det finns ett Àndligt antal routningsnycklar, bör man titta pÄ flera fanout-utbyte, som Àr 1:1 kopplade till routningsnyckeln. Kom ihÄg att fanout-utbyte den Àr snabbast.

Om antalet rutter strÀvar mot oÀndligheten, bör man uppmÀrksamma topic exchange eller, om mönstret inte behövs, kan man vÀlja direktutbyte, eftersom det Àr snabbare. topic exchange.

Kombinationer av olika exchange bör hjÀlpa till att hitta rÀtt skalerbar konfiguration, som uppfyller bÄde nuvarande och vÀxande krav för systemet.

Antalet exchange och köer mÄste vara minimalt i förhÄllande till antalet rutter.

I nÀsta artikel kommer vi att börja titta nÀrmare pÄ Queues och Bindings.

LĂ€nkar

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster