RabbitMQ. Rhan 2. Deall Cyfnewidiadau

Exchange - cyfnewidydd neu bwynt cyfnewid. Anfonir negeseuon ato. Exchange yn dosbarthu'r neges mewn un neu fwy o giwiau. Ef llwybrau negeseuon i giw yn seiliedig ar ddolenni a grëwyd (bindings) rhyngddo a'r ciw.

Exchange ddim Proses Erlang. Am resymau scalability exchange yn llinyn (dolen i'r modiwl gyda'r cod lle mae'r rhesymeg llwybro wedi'i lleoli) yn y gronfa ddata adeiledig mnesia. Bydd 1 mil o gyfnewidwyr yn defnyddio dim ond 1MB o gof.

Tabl cynnwys

Cyfnewid Uniongyrchol

Direct exchange - ei ddefnyddio pan fo angen cyflwyno neges i giwiau penodol. Cyhoeddir y neges i'r cyfnewidydd gyda phenodol allwedd llwybro ac yn mynd i mewn i bob ciw sy'n gysylltiedig â'r cyfnewidydd hwn gydag allwedd llwybro tebyg. Mae'r allwedd llwybro yn llinyn. Paru yn cael ei wneud gan ddefnyddio gwirio llinynnau ar gyfer cydraddoldeb.

Cynrychioliad graffigol o lif y neges:

RabbitMQ. Rhan 2. Deall Cyfnewidiadau

В rabbitmq mae cysyniad cyfnewidydd rhagosodedig. Mae direct exchange Dim enw. Os defnyddir y cyfnewidydd rhagosodedig, yna bydd y neges yn cael ei chyfeirio i giw gydag enw cyfartal i allwedd llwybro neges.

Cyfnewid Testun

Topic exchange - tebyg direct exchange galluogi llwybro dethol drwy gymharu'r allwedd llwybro. Ond, yn yr achos hwn, rhoddir yr allwedd gan dempled. Wrth greu templed, defnyddiwch 0 neu fwy o eiriau (llythyrau AZ и az a niferoedd 0-9), wedi'i wahanu gan ddot, yn ogystal â symbolau * и #.

  • * - gellir ei ddisodli gyda union 1 y gair
  • # - gellir ei ddisodli gan 0 neu fwy o eiriau

Cynrychioliad graffigol o lif y neges:

RabbitMQ. Rhan 2. Deall Cyfnewidiadau

Gan ddechrau o fersiwn RabbitMQ 2.4.0 algorithm llwybro ar gyfer topic exchange dechrau gweithio tan 145 gwaith yn gyflymach. Cyflawnwyd hyn drwy roi'r dull ar waith ceisio gweithredu, sy'n awgrymu cynrychioli templedi fel strwythur coeden. Er enghraifft templedi a.b.c, a.*.b.c, a.#.c и b.b.c yn cael ei gynrychioli gan y strwythur canlynol:

RabbitMQ. Rhan 2. Deall Cyfnewidiadau

Chwilir paru patrymau gan ddechrau o'r gwraidd ac yn mynd o'r top i'r gwaelod.

Nodweddion:

  • gall y defnydd o'r cyfnewidydd hwn ddod yn dewis da ar gyfer datblygu ap yn y dyfodol, achos gellir addasu templedi bob amser fel bod y neges yn cael ei chyhoeddi yn yr un modd direct exchange neu fanout exchange
  • templedi sy'n defnyddio * llawer cyflymachna thempledi sy'n defnyddio #.
  • topic exchange arafach direct exchange

Cyfnewidfa Fanout

Fanout exchange - mae pob neges yn cael ei danfon i bob ciw hyd yn oed os yw allwedd llwybro wedi'i nodi yn y neges.

Nodweddion:

  • RabbitMQ nid yw'n gweithio gydag allweddi llwybro a thempledi sy'n cael effaith gadarnhaol ar berfformiad. Dyma'r cyflymaf exchange;
  • rhaid i bob defnyddiwr allu prosesu pob neges;

Cynrychioliad graffigol o lif y neges:

RabbitMQ. Rhan 2. Deall Cyfnewidiadau

Cyfnewid Penawdau

Headers exchange - cyfeirio negeseuon at giwiau cysylltiedig yn seiliedig ar gymharu parau o briodweddau (allweddol, gwerth). headers rhwymol ac eiddo neges tebyg. headers yw a Dictionary<ключ, значение>.

Os ydych chi'n ychwanegu allwedd arbennig i'r geiriadur x-match gydag ystyr any, yna mae'r neges yn cael ei gyfeirio os yw'r parau (allwedd, gwerth) yn cyfateb yn rhannol. Mae'r ymddygiad hwn yn debyg i'r gweithredwr or.

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

Allwedd ddiofyn x-match yn cynnwys gwerth all. Mae hyn yn golygu bod y neges yn cael ei chyfeirio pan fydd y parau (allwedd, gwerth) yn cyfateb yn llwyr. Mae'r ymddygiad hwn yn debyg i'r gweithredwr and.

Cynrychioliad graffigol o lif y neges:

RabbitMQ. Rhan 2. Deall Cyfnewidiadau

Nodweddion:

  • hyblygrwydd ychwanegol
  • gorbenion cyfrifiannol ychwanegol. Pob pâr (allwedd, gwerth) o'r priodoledd headers rhaid eu didoli yn ôl enw allweddol cyn cyfrifo gwerthoedd llwybro neges. Yn arafach na mathau eraill o gyfnewid.

Cyfnewid Hashing Cyson

Mae'r cyfnewidydd hwn yn ategyn и heb ei adeiladu i mewn в RabbitMQ.

Consistent-hashing exchange (cyfnewid hash-cyson) - a ddefnyddir pan fo ciwiau lluosog sy'n dderbynwyr posibl neges a phan fydd angen i chi lwytho cydbwysedd rhyngddynt. Mae'r neges yn gysylltiedig â'r ciw yn ôl pwysau (gwerth llinynnol amodol o 0 - n).

Pwysau cyfatebol ciwiau - yn dynodi y bydd pob ciw yn derbyn tua'r un faint negeseuon (bydd pob neges yn cael ei rhoi mewn un ciw yn unig). Nid oes sicrwydd llwyr y bydd negeseuon yn cael eu dosbarthu'n unffurf.

Cynrychioliad graffigol o lif y neges:

RabbitMQ. Rhan 2. Deall Cyfnewidiadau

Hash wedi'i gyfrifo yn seiliedig ar allwedd llwybro neu eiddo headers negeseuon. Os oedd gan bob neges a gyhoeddwyd allweddi llwybro gwahanol, neu headers, yna bydd y dosbarthiad yn digwydd yn ôl pwysau. Fel arall, bydd yr allwedd llwybro yn cael ei ddefnyddio, neu headers.

Dylai helpu pan fydd angen i fewnbwn defnyddwyr dyfu'n uwch na datrysiad gyda defnyddwyr lluosog yn defnyddio'r un ciw.

Cyfuniad o gyfnewidwyr (E2E)

Gellir cyfuno ymddygiad pob cyfnewidydd trwy ddefnyddio cyfathrebu Cyfnewid-i-gyfnewid (nid yw cyfuniad o gyfnewidwyr wedi'i gynnwys yn y fanyleb AMQP. Mae hwn yn estyniad protocol o'r ochr RabbitMQ).

Cynrychioliad graffigol o lif y neges:

RabbitMQ. Rhan 2. Deall Cyfnewidiadau

Ar draul E2E gallwn ddod o hyd i'r cyfluniad graddadwy cywir sy'n bodloni gofynion cyfredol a chynyddol.

Creu Cyfnewidfa

Mae'r cyfnewidydd yn cael ei greu gan ddefnyddio cydamserol RPC cais i'r gweinydd. Gwneir y cais gan ddefnyddio'r dull Exchange.Declarewedi'i alw gyda pharamedrau:

  • enw cyfnewidydd
  • math cyfnewidydd
  • opsiynau eraill

Enghraifft creu exchange gyda help RabbitMQ.Client:

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

  • exchange - enw'r cyfnewidydd yr ydym am ei greu. Rhaid i'r enw fod yn unigryw
  • type - math o gyfnewidydd
  • durable - os gosod true, Yna exchange bydd yn barhaol. Bydd yn cael ei storio ar ddisg a bydd yn gallu goroesi ailgychwyn gweinydd / brocer. Os yw'r gwerth false, Yna exchange dros dro a bydd yn cael ei dynnu pan fydd y gweinydd/brocer yn cael ei ailgychwyn
  • autoDelete - dileu awtomatig. Exchange yn cael ei ddileu pan fydd yr holl giwiau cysylltiedig yn cael eu dileu
  • arguments yn ddadleuon dewisol. Gan amlaf, trwy'r dadleuon a osodwyd alternative exchange (cyfnewidydd amgen). Os na all neges fynd trwy'r llwybr gwreiddiol, gellir ei hanfon i gyfnewidfa arall i'w chyfeirio ar hyd llwybr gwahanol.

RabbitMQ. Rhan 2. Deall Cyfnewidiadau

Os creu exchange efallai, yna bydd y gweinydd yn anfon synchronous at y cleient RPC yr ateb Exchange.DeclareOk. Os creu yn amhosib (Gwrthodwyd y cais Exchange.Declare), yna bydd y sianel yn cau gweinydd gan ddefnyddio gorchymyn asyncronaidd Channel.Close a bydd y cleient yn cael eithriad OperationInterruptedException, a fydd yn cynnwys y cod gwall a'i ddisgrifiad.

Rhaid creu cyfnewidydd cyn postio. Os byddwch yn cyhoeddi neges i ryw gyfnewidydd nad yw'n bodoli - RabbitMQ gwared arno'n dawel.

Creu GUI Cyfnewid

Ewch i'r panel gweinyddol RabbitMQ dan ddefnyddiwr guest (enw defnyddiwr: guest a chyfrinair: guest). Sylwch fod y defnyddiwr guest dim ond yn gallu cysylltu o localhost. Nawr, gadewch i ni fynd i'r tab Exchanges a chliciwch ar Add a new exchange. Llenwch yr eiddo:

RabbitMQ. Rhan 2. Deall Cyfnewidiadau

Disgrifiwyd y rhan fwyaf o'r eiddo uchod. Yma rydym yn nodi os ydym yn gosod Internal, yna dim ond ar gyfer y gellir defnyddio'r cyfnewid E2E. Producer ni fydd yn gallu anfon negeseuon i gyfnewidfa o'r fath.

Casgliad

Wrth ddatblygu system, mae'n gyfleus disgrifio'r topoleg llwybro defnyddio graff. Ond cyn i chi ddechrau adeiladu graff, mae'n werth tynnu sylw at y llwybrau gyda thraffig uchel, oherwydd. maent yn gofyn trwybwn uwch (perfformiad). Nesaf, gallwch chi ddosbarthu'r traffig. Ac yna dechrau adeiladu.

Os yn y graff lluniedig mae'n bodoli set gyfyngedig allweddi llwybro, felly, mae'n werth edrych tuag at sawl un fanout exchange, sy'n gysylltiedig 1:1 â'r allwedd llwybro. Cofiwch hynny fanout exchange y cyflymaf.

Os yw nifer y llwybrau yn tueddu at anfeidroldeb, mae'n werth talu sylw i topic exchange neu, os nad oes angen y templed, yna gallwch ddewis direct exchnge, achos mae'n gyflymach topic exchange.

Cyfuniadau o amrywiol exchange Dylai eich helpu i ddod o hyd i'r un iawn. cyfluniad graddadwy, sy'n bodloni gofynion system gyfredol a chynyddol.

Rhif exchange a dylai ciwiau fod yn fach iawn o gymharu â nifer y llwybrau.

Yn yr erthygl nesaf, byddwn yn dechrau deall mwy am Giwiau a Rhwymiadau.

cyfeiriadau

Ffynhonnell: hab.com

Ychwanegu sylw