RabbitMQ. Parti 2. Fehim Skambji

Exchange — skambju jew punt ta' skambju. Il-messaġġi jintbagħtu lilha. Exchange iqassam messaġġ fi kju wieħed jew aktar. Hu iwassal messaġġi għal kju ibbażat fuq il-konnessjonijiet maħluqa (bindings) bejnu u l-kju.

Exchange mhux proċess Erlang. Għal raġunijiet ta' skalabbiltà exchange - din hija linja (link għal modulu b'kodiċi fejn tinsab il-loġika tar-rotta) fid-database integrata mneżja. 1 elf exchangers se jikkunsmaw biss 1MB ta 'memorja.

Tabella tal-kontenut

  • RabbitMQ. Parti 1. Introduzzjoni. Erlang, AMQP u RPC
  • RabbitMQ. Parti 2. Fehim Skambji
  • RabbitMQ. Parti 3. Nifhmu l-Kjuwijiet u l-Irbit
  • RabbitMQ. Parti 4. Nifhmu x'inhuma messaġġi u frames
  • RabbitMQ. Parti 5: Pubblikazzjoni tal-Messaġġ u Prestazzjoni tal-Konsum
  • RabbitMQ. Parti 6. Reviżjoni tal-moduli tal-Federazzjoni u tal-Pala
  • RabbitMQ. Parti 7. Dettalji dwar Konnessjoni u Chanel
  • RabbitMQ. Parti 8. RabbitMQ f'.NET
  • RabbitMQ. Parti 9. Monitoraġġ

Skambju Dirett

Direct exchange - użat meta meħtieġ iwassal messaġġ lil kjuwijiet speċifiċi. Il-messaġġ jiġi ppubblikat lill-iskambjatur b'mod speċifiku ċavetta tar-rotta u jidħol fil-kjuwijiet kollha li huma konnessi ma 'dan l-iskambjatur b'ċavetta ta' rotta simili. Iċ-ċavetta tar-rotta hija string. It-tqabbil jinstab bl-użu verifika ta' kordi għall-ekwivalenza.

Rappreżentazzjoni grafika tal-fluss tal-messaġġ:

RabbitMQ. Parti 2. Fehim Skambji

В rabbitmq hemm kunċett skambjatur default. Hija direct exchange bla isem. Jekk jintuża l-iskambjatur default, il-messaġġ jiġi mgħoddi għal kju b'isem ugwali għal ċavetta tar-rotta tal-messaġġ.

Skambju ta' Suġġetti

Topic exchange – simili direct exchange jippermetti rotta selettiva billi tqabbel iċ-ċavetta tar-rotta. Iżda, f'dan il-każ, iċ-ċavetta tingħata skond il-mudell. Meta toħloq mudell, uża 0 jew aktar kliem (ittri AZ и az u n-numri 0-9), separati b'tikka, kif ukoll simboli * и #.

  • * - jistgħu jiġu sostitwiti eżattament 1 kelma
  • # - jistgħu jiġu sostitwiti minn 0 jew aktar kliem

Rappreżentazzjoni grafika tal-fluss tal-messaġġ:

RabbitMQ. Parti 2. Fehim Skambji

Mill-verżjoni RabbitMQ 2.4.0 algoritmu tar-rotta għal topic exchange beda jaħdem sakemm 145 darbiet aktar mgħaġġla. Dan kisbu billi introduċew approċċ tipprova l-implimentazzjoni, li jinvolvi li tirrappreżenta mudelli bħala struttura tas-siġra. Per eżempju mudelli a.b.c, a.*.b.c, a.#.c и b.b.c se tkun rappreżentata mill-istruttura li ġejja:

RabbitMQ. Parti 2. Fehim Skambji

It-tfittxija għat-tqabbil ta 'mudell titwettaq billi tibda mill-għerq u tipproċedi minn fuq għal isfel.

Karatteristiċi:

  • l-użu ta 'dan l-iskambjatur jista' jsir għażla tajba għall-iżvilupp futur possibbli tal-applikazzjoni, għax mudelli dejjem jistgħu jiġu personalizzati sabiex il-messaġġ jiġi ppubblikat bl-istess mod direct exchange jew fanout exchange
  • mudelli li jużaw * ħafna aktar malajrminn mudelli li jużaw #.
  • topic exchange aktar bil-mod direct exchange

Skambju Fanout

Fanout exchange - il-messaġġi kollha jitwasslu lill-kjuwijiet kollha anki jekk ċavetta tar-rotta hija speċifikata fil-messaġġ.

Karatteristiċi:

  • RabbitMQ ma taħdimx b'ċwievet u mudelli tar-routing li għandu effett pożittiv fuq il-produttività. Dan huwa l-aktar mgħaġġel exchange;
  • il-konsumaturi kollha għandhom ikunu jistgħu jipproċessaw il-messaġġi kollha;

Rappreżentazzjoni grafika tal-fluss tal-messaġġ:

RabbitMQ. Parti 2. Fehim Skambji

Skambju ta' headers

Headers exchange - iwassal messaġġi għal kjuwijiet assoċjati bbażati fuq tqabbil ta' pari ta' proprjetà (ċavetta, valur). headers rbit u proprjetajiet ta' messaġġ simili. headers huwa a Dictionary<ключ, значение>.

Jekk iżżid ċavetta speċjali mad-dizzjunarju x-match b'tifsira any, allura l-messaġġ jiġi mgħoddi jekk ikun hemm qbil parzjali ta' pari (ċavetta, valur). Din l-imġieba hija simili għall-operatur or.

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

Ċavetta default x-match fih il-valur all. Dan ifisser li l-messaġġ jiġi mgħoddi jekk il-pari (ċavetta, valur) jaqblu eżattament. Din l-imġieba hija simili għall-operatur and.

Rappreżentazzjoni grafika tal-fluss tal-messaġġ:

RabbitMQ. Parti 2. Fehim Skambji

Karatteristiċi:

  • flessibilità addizzjonali
  • overhead komputazzjonali addizzjonali. Il-pari kollha (ċavetta, valur) ta' attribut headers iridu jiġu magħżula bl-isem taċ-ċavetta qabel ma jiġu kkalkulati l-valuri tar-rotta tal-messaġġi. Aktar bil-mod minn tipi oħra ta 'skambju.

Skambju Konsistenti-Hashing

Dan l-iskambjatur huwa plugin и mhux mibnija в RabbitMQ.

Consistent-hashing exchange (skambju b'hashing konsistenti) - użat meta jkun hemm diversi kjuwijiet li huma riċevituri potenzjali ta 'messaġġ, u meta jkollok bżonn tibbilanċja t-tagħbija bejniethom. Il-konnessjoni ta' messaġġ mal-kju sseħħ bil-piż (valur ta' string kondizzjonali minn 0 - n).

Piż ekwivalenti ta' kjuwijiet - jindika li kull kju se jirċievi bejn wieħed u ieħor l-istess ammont messaġġi (kull messaġġ jitqiegħed f'kju wieħed biss). M'hemm l-ebda garanzija sħiħa ta 'distribuzzjoni uniformi ta' messaġġi.

Rappreżentazzjoni grafika tal-fluss tal-messaġġ:

RabbitMQ. Parti 2. Fehim Skambji

Hash ikkalkulat ibbażat fuq iċ-ċavetta jew proprjetà tar-rotta headers messaġġi. Jekk il-messaġġi kollha ppubblikati kellhom ċwievet ta 'routing differenti jew headers, allura d-distribuzzjoni se sseħħ bil-piż. Inkella, iċ-ċavetta tar-rotta tintuża jew headers.

Għandu jgħin meta l-produzzjoni tal-konsumatur jeħtieġ li tikber ogħla minn soluzzjoni b'ħafna konsumaturi li jużaw kju wieħed.

Skambjaturi li jgħaqqdu (E2E)

L-imġieba ta 'l-iskambjaturi kollha tista' tiġi kkombinata bl-użu tal-komunikazzjoni Skambju għal Skambju (iskambjaturi li jgħaqqdu mhux inkluż fl-ispeċifikazzjoni AMQP. Din hija estensjoni tal-protokoll mill-ġenb RabbitMQ).

Rappreżentazzjoni grafika tal-fluss tal-messaġġ:

RabbitMQ. Parti 2. Fehim Skambji

Minhabba E2E nistgħu nsibu l-konfigurazzjoni skalabbli t-tajba biex tissodisfa kemm ir-rekwiżiti attwali kif ukoll dawk li qed jikbru.

Oħloq Skambju

Il-ħolqien ta 'skambjatur iseħħ bl-użu sinkroniku RPC talba lis-server. It-talba ssir bl-użu tal-metodu Exchange.Declareimsejħa b'parametri:

  • isem tal-iskambjatur
  • tip ta' skambjatur
  • parametri oħra

Eżempju tal-ħolqien exchange permezz ta ' RabbitMQ.Klijent:

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

  • exchange — l-isem tal-iskambjatur li rridu noħolqu. L-isem irid ikun uniku
  • type — tip ta' skambjatur
  • durable - jekk installat true, Imbagħad exchange se jkun permanenti. Se jkun maħżun fuq disk u jista 'jgħix minn server/sensar mill-ġdid. Jekk il-valur false, Imbagħad exchange huwa temporanju u se jitħassar meta s-server/sensar jerġa 'jibda
  • autoDelete - tneħħija awtomatika. Exchange se jitħassru meta l-kjuwijiet kollha assoċjati magħha jitħassru
  • arguments - argumenti fakultattivi. Ħafna drabi, huma jispeċifikaw permezz ta 'argumenti alternative exchange (skambjatur alternattiv). Jekk messaġġ ma jistax jivvjaġġa tul ir-rotta oriġinali, jista' jintbagħat lil skambjatur alternattiv biex jiġi mgħoddi tul mogħdija differenti.

RabbitMQ. Parti 2. Fehim Skambji

Jekk il-ħolqien exchange forsi, allura s-server jibgħat lill-klijent sinkroniku RPC twieġeb Exchange.DeclareOk. Jekk il-ħolqien huwa impossibbli (it-talba ġiet miċħuda Exchange.Declare), allura il-kanal se jagħlaq server li juża kmand mhux sinkroniku Channel.Close u l-klijent jirċievi eċċezzjoni OperationInterruptedException, li se jkun fih il-kodiċi tal-iżball u d-deskrizzjoni tiegħu.

Għandu jinħoloq skambjatur qabel ma jitqiegħdu messaġġi. Jekk tippubblika messaġġ lil xi skambjatur ineżistenti - RabbitMQ se tneħħiha bil-kwiet.

Ħolqien ta' Skambju permezz ta' GUI

Mur fil-pannell tal-amministrazzjoni RabbitMQ taħt l-utent guest (isem tal-utent: guest u password: guest). Jekk jogħġbok innota li l-utent guest jista' jikkonnettja biss minn localhost. Issa ejja mmorru fit-tab Exchanges u kklikkja fuq Add a new exchange. Imla l-proprjetajiet:

RabbitMQ. Parti 2. Fehim Skambji

Ħafna mill-proprjetajiet ġew deskritti hawn fuq. Hawnhekk ninnotaw li jekk nissettjaw Internal, allura l-iskambju jista 'jintuża biss għal E2E. Producer mhux se jkunu jistgħu jibagħtu messaġġi lil tali skambju.

Konklużjoni

Meta tiżviluppa sistema, huwa konvenjenti li tiddeskrivi t-topoloġija rotta bl-użu ta’ graff. Iżda qabel ma tibda tibni graff, ta 'min jenfasizza l-mogħdijiet bi traffiku għoli, għaliex huma dawk li jitolbu throughput ogħla (prestazzjoni). Sussegwentement, tista 'tikklassifika t-traffiku. U mbagħad biss tibda tibni.

Jekk fil-graff mibni hemm sett finit routing keys, allura ta 'min iħares lejn diversi fanout exchange, li huma 1:1 relatati maċ-ċavetta tar-rotta. Niftakru li fanout exchange l-aktar mgħaġġla.

Jekk in-numru ta’ rotot tendenza għall-infinit, allura għandek tagħti attenzjoni lil topic exchange jew, jekk il-mudell ma jkunx meħtieġ, tista 'tagħżel direct exchnge, għax hu aktar mgħaġġel topic exchange.

Kombinazzjonijiet ta 'differenti exchange għandu jgħinek issib dik it-tajba konfigurazzjoni skalabbli, li tissodisfa kemm ir-rekwiżiti tas-sistema attwali kif ukoll dawk li qed jikbru.

Numru exchange u l-kjuwijiet għandhom ikunu minimi meta mqabbla man-numru ta 'rotot.

Fl-artiklu li jmiss se nibdew nifhmu Kjuwijiet u Bindings f'aktar dettall.

referenzi

Sors: www.habr.com

Żid kumment