RabbitMQ. Part 2. Skilningur á skiptum

Exchange — skiptibúnaður eða skiptipunktur. Skilaboð eru send til þess. Exchange dreifir skilaboðum í einni eða fleiri röðum. Hann beinir skilaboðum í biðröð byggt á sköpuðum tengingum (bindings) milli hans og biðröðarinnar.

Exchange er ekki Erlang ferli. Af sveigjanleikaástæðum exchange - þetta er lína (tengill á einingu með kóða þar sem leiðarrökfræðin liggur) í innbyggða gagnagrunninum minnisleysi. 1 skiptis munu aðeins neyta 1MB af minni.

efnisyfirlit

Bein skipti

Direct exchange - notað þegar þörf krefur skila skilaboðum í sérstakar biðraðir. Skilaboðin eru birt til skiptistöðvarinnar með sérstöku leiðarlykill og kemst inn í allar biðraðir sem eru tengdar þessum exchanger með svipuðum leiðarlykli. Leiðarlykillinn er strengur. Samsvörun er fundin með því að nota athuga strengi fyrir jafngildi.

Myndræn framsetning á skilaboðaflæði:

RabbitMQ. Part 2. Skilningur á skiptum

В rabbitmq það er hugtak sjálfgefið skipti. Það direct exchange ekkert nafn. Ef sjálfgefinn skiptibúnaður er notaður verður skilaboðunum beint í biðröð með nafni sem er jafnt og skilaboðaleiðingarlykill.

Efnisskipti

Topic exchange - svipað direct exchange gerir sértæka leið kleift með því að bera saman leiðarlykilinn. En í þessu tilfelli er lykillinn gefinn samkvæmt sniðmátinu. Þegar þú býrð til sniðmát skaltu nota 0 eða fleiri orð (stafir AZ и az og tölur 0-9), aðskilin með punkti, auk tákna * и #.

  • * - hægt að skipta út fyrir nákvæmlega 1 orðið
  • # - hægt að skipta út fyrir 0 eða fleiri orð

Myndræn framsetning á skilaboðaflæði:

RabbitMQ. Part 2. Skilningur á skiptum

Frá útgáfu RabbitMQ 2.4.0 leiðaralgrím fyrir topic exchange hóf störf til kl 145 sinnum hraðar. Þeir náðu þessu með því að kynna nálgun reyndu útfærslu, sem felur í sér að tákna mynstur sem trjábyggingu. Til dæmis sniðmát a.b.c, a.*.b.c, a.#.c и b.b.c verður táknuð með eftirfarandi uppbyggingu:

RabbitMQ. Part 2. Skilningur á skiptum

Leitin að því að passa mynstur fer fram frá rótinni og heldur áfram frá toppi til botns.

Features:

  • notkun þessa skiptis getur orðið góður kostur fyrir mögulega framtíðarþróun forritsins, vegna þess sniðmát er alltaf hægt að aðlaga þannig að skilaboðin séu birt á sama hátt direct exchange eða fanout exchange
  • sniðmát sem nota * miklu hraðaren sniðmát sem nota #.
  • topic exchange hægar direct exchange

Fanout Exchange

Fanout exchange - öll skilaboð eru send í allar biðraðir jafnvel þótt leiðarlykill sé tilgreindur í skilaboðunum.

Features:

  • RabbitMQ virkar ekki með leiðarlyklum og sniðmátum sem hefur jákvæð áhrif á framleiðni. Þetta er það hraðasta exchange;
  • allir neytendur verða að geta unnið úr öllum skilaboðum;

Myndræn framsetning á skilaboðaflæði:

RabbitMQ. Part 2. Skilningur á skiptum

Hausaskipti

Headers exchange - beinir skilaboðum í tengdar biðraðir byggt á samanburði á (lykill, gildi) eignapörum headers bindingar og álíka skilaboðareiginleika. headers er a Dictionary<ключ, значение>.

Ef þú bætir sérstökum lykli við orðabókina x-match með merkingu any, þá er skilaboðunum beint ef það er samsvörun að hluta (lykill, gildi) pör. Þessi hegðun er svipuð og rekstraraðili or.

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

Sjálfgefinn lykill x-match inniheldur gildið all. Þetta þýðir að skilaboðin eru send ef (lykill, gildi) pörin passa nákvæmlega. Þessi hegðun er svipuð og rekstraraðili and.

Myndræn framsetning á skilaboðaflæði:

RabbitMQ. Part 2. Skilningur á skiptum

Features:

  • auka sveigjanleika
  • viðbótar útreikningskostnaður. Öll (lykill, gildi) pör eigindar headers verður að flokka eftir lykilheiti áður en reiknaðar gildi skilaboðaleiðar eru reiknuð. Hægari en aðrar skiptitegundir.

Samræmd-hashing skipti

Þessi skiptibúnaður er stinga inn и ekki innbyggður в RabbitMQ.

Consistent-hashing exchange (skipta með samkvæmri hashing) - notað þegar það eru nokkrar biðraðir sem eru hugsanlegir viðtakendur skilaboða og þegar þú þarft að jafna álagið á milli þeirra. Tenging skilaboða við biðröð á sér stað eftir þyngd (skilyrt strengjagildi frá 0 - n).

Samsvarandi þyngd biðraða - gefur til kynna að hver biðröð fái um það bil sömu upphæð skilaboð (hver skilaboð verða aðeins sett í eina biðröð). Það er engin fullkomin trygging fyrir samræmdri dreifingu skilaboða.

Myndræn framsetning á skilaboðaflæði:

RabbitMQ. Part 2. Skilningur á skiptum

Hash reiknað út frá leiðarlykli eða eign headers skilaboð. Ef öll birt skilaboð voru með mismunandi leiðarlykla eða headers, þá mun dreifingin eiga sér stað eftir þyngd. Annars verður leiðarlykillinn notaður eða headers.

Ætti að hjálpa þegar afköst neytenda þurfa að vaxa hærra en lausn með mörgum neytendum sem nota eina biðröð.

Sameiningarskipti (E2E)

Hegðun allra skipta er hægt að sameina með því að nota samskipti Skipti til skiptis (sameinaskipti er ekki innifalið í forskriftinni AMQP. Þetta er framlenging á bókuninni frá hlið RabbitMQ).

Myndræn framsetning á skilaboðaflæði:

RabbitMQ. Part 2. Skilningur á skiptum

Á kostnað E2E við getum fundið réttu skalanlegu uppsetninguna til að uppfylla bæði núverandi og vaxandi kröfur.

Búðu til Exchange

Sköpun skiptis á sér stað með því að nota samstillt RPC beiðni til netþjónsins. Beiðnin er gerð með aðferðinni Exchange.Declarekallað með breytum:

  • nafn skiptimanns
  • tegund skiptis
  • aðrar breytur

Sköpunardæmi exchange með hjálpinni RabbitMQ.Client:

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

  • exchange — nafn skipta sem við viljum búa til. Nafnið verður að vera einstakt
  • type — gerð skipta
  • durable - ef uppsett trueþá exchange verður varanlegt. Það verður geymt á diski og getur lifað af endurræsingu miðlara/miðlara. Ef verðmæti falseþá exchange er tímabundið og verður eytt þegar miðlarinn/miðlarinn er endurræstur
  • autoDelete - sjálfvirkur flutningur. Exchange verður eytt þegar öllum biðröðum sem tengjast því er eytt
  • arguments - valkvæð rök. Oftast tilgreina þeir með rökum alternative exchange (val skiptari). Ef skilaboð geta ekki farið eftir upprunalegu leiðinni er hægt að senda þau til varaskipta til að vera flutt eftir annarri leið.

RabbitMQ. Part 2. Skilningur á skiptum

Ef sköpun exchange kannski, þá mun þjónninn senda viðskiptavininum samstillt RPC svara Exchange.DeclareOk. Ef sköpun er ómögulegt (beiðni var hafnað Exchange.Declare) Þá rásin mun lokast miðlara með ósamstilltri skipun Channel.Close og viðskiptavinurinn fær undanþágu OperationInterruptedException, sem mun innihalda villukóðann og lýsingu hans.

Búa verður til skiptistöð áður en skilaboð eru birt. Ef þú birtir skilaboð til einhverra skipta sem ekki er til - RabbitMQ mun hljóðlega fjarlægja það.

Að búa til Exchange í gegnum GUI

Farðu á stjórnborðið RabbitMQ undir notanda guest (notendanafn: guest og lykilorð: guest). Vinsamlegast athugaðu að notandi guest getur aðeins tengst frá localhost. Nú skulum við fara í flipann Exchanges og smelltu á Add a new exchange. Fylltu út eignirnar:

RabbitMQ. Part 2. Skilningur á skiptum

Flestum eignunum hefur verið lýst hér að ofan. Hér tökum við fram að ef við setjum Internal, þá er aðeins hægt að nota skiptin fyrir E2E. Producer mun ekki geta sent skilaboð til slíkra skipta.

Ályktun

Þegar kerfi er þróað er þægilegt að lýsa staðfræðinni leiðsögn með því að nota línurit. En áður en þú byrjar að byggja línurit, er það þess virði að leggja áherslu á slóðir með mikla umferð, vegna þess að það eru þeir sem krefjast meiri afköst (frammistaða). Næst geturðu flokkað umferðina. Og aðeins þá byrjaðu að byggja.

Ef í smíðaða línuritinu er endanlegt sett leiðarlykla, þá er þess virði að horfa til nokkurra fanout exchange, sem eru 1:1 tengd leiðarlyklinum. Við minnumst þess fanout exchange hraðasti.

Ef fjöldi leiða stefnir í óendanleikann, þá ættir þú að borga eftirtekt til topic exchange eða ef ekki er þörf á sniðmátinu geturðu valið direct exchnge, vegna þess hann er fljótari topic exchange.

Samsetningar af mismunandi exchange ætti að hjálpa þér að finna þann rétta stigstærð stilling, sem uppfyllir bæði núverandi og vaxandi kerfiskröfur.

Númer exchange og biðraðir ættu að vera í lágmarki miðað við fjölda leiða.

Í næstu grein munum við byrja að skilja biðraðir og bindingar nánar.

tilvísanir

Heimild: www.habr.com

Bæta við athugasemd