Exchange — skambju jew punt ta' skambju. Il-messaġġi jintbagħtu lilha. Exchangeiqassam 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.
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 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ġġ:
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:
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:
RabbitMQma 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ġġ:
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ġġ:
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ġġ:
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ġġ:
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:
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.
Jekk il-ħolqien exchangeforsi, 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:
Ħ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.