ShkĂ«mbim â kĂ«mbim ose pikĂ« kĂ«mbimi. NĂ« tĂ« dĂ«rgohen mesazhe. ShkĂ«mbim distribuon mesazhin nĂ« njĂ« ose disa radhĂ«. Ai rute mesazhet nĂ« radhĂ« nĂ« bazĂ« tĂ« lidhjeve tĂ« krijuara (bindings) midis tij dhe radhĂ«s.
ShkĂ«mbim nuk Ă«shtĂ« . PĂ«r arsye tĂ« zgjerueshmĂ«risĂ« exchange â Ă«shtĂ« njĂ« varg (link pĂ«r modulin me kodin, ku ndodhet logjika e rutes) nĂ« bazĂ«n e tĂ« dhĂ«nave tĂ« integruara . 1 mijĂ« kĂ«mbimtarĂ« do tĂ« konsumojnĂ« vetĂ«m 1MB memorie.
Përmbajtja
- RabbitMQ. Pjesa 3. Të kuptojmë Queues dhe Bindings
- RabbitMQ. Pjesa 4. Të kuptojmë çfarë janë mesazhet dhe frames
- RabbitMQ. Pjesa 5. Performanca e publikimit dhe konsumimit të mesazheve
- RabbitMQ. Pjesa 6. Pasqyrë e moduleve Federation dhe Shovel
- RabbitMQ. Pjesa 7. Në detaje për Connection dhe Chanel
- RabbitMQ. Pjesa 8. RabbitMQ në .NET
- RabbitMQ. Pjesa 9. Monitorimi
Shkëmbimi Direk
ShkĂ«mbimi direkt â pĂ«rdoret kur nevojitet tĂ« dĂ«rgoni mesazhin nĂ« radhĂ« tĂ« caktuara. Mesazhi publikohet nĂ« kĂ«mbimtar me njĂ« çelĂ«s rute dhe pĂ«rfundon nĂ« tĂ« gjitha radhĂ«t qĂ« janĂ« tĂ« lidhura me kĂ«tĂ« kĂ«mbimtar me njĂ« çelĂ«s rute tĂ« ngjashĂ«m. ĂelĂ«si i rutes Ă«shtĂ« njĂ« varg. KĂ«rkimi i pĂ«rputhjes realizohet pĂ«rmes kontrollit tĂ« pĂ«rputhshmĂ«risĂ« sĂ« vargjeve.
Prezantimi vizual i rrjedhës së mesazheve:

Në rabbitmq ekziston koncepti këmbimi i parazgjedhur. Kjo është këmbimi direkt pa emër. Nëse përdoret këmbimi i parazgjedhur, atëherë mesazhi do të rutohet në radhen me emrin e barabartë me çelësin e rutes së mesazhit.
Shkëmbimi Tematik
ShkĂ«mbimi tematik â ngjashĂ«m kĂ«mbimi direkt ofron mundĂ«sinĂ« e realizimit tĂ« rutes selektive duke krahasuar çelĂ«sin e rutes. Por, nĂ« kĂ«tĂ« rast, çelĂ«si pĂ«rcaktohet sipĂ«rmarrjeve. GjatĂ« krijimit tĂ« sipĂ«rmarrjeve pĂ«rdoren 0 njĂ« ose mĂ« shumĂ« fjalĂ« (gĂ«rmat AZ dhe az dhe numrat 0-9), tĂ« ndara me pikĂ«, si dhe simbolet * dhe #.
*â mund tĂ« zĂ«vendĂ«sohet me saktĂ«sisht1fjalĂ«#â mund tĂ« zĂ«vendĂ«sohet me0njĂ« ose mĂ« shumĂ« fjalĂ«
Prezantimi vizual i rrjedhës së mesazheve:

Duke filluar nga versioni RabbitMQ 2.4.0 algoritmi i rutes për këmbimin tematik ka filluar të funksionojë deri 145 më shpejt. Kjo arritën përmes implementimit të qasjes , i cili nënkupton paraqitjen e sipërmarrjeve si një strukturë peme. Për shembull sipërmarrjet a.b.c, a.*.b.c, a.#.c dhe b.b.c do të paraqiten me këtë strukturë:

Kërkimi i përputhjes me sipërmarrjen realizohet duke filluar nga rrënjët dhe duke ndjekur nga lart poshtë.
Karakteristikat:
- përdorimi i këtij këmbimi mund të jetë një zgjedhje e mirë për zhvillimin e ardhshëm të mundshëm të aplikacionit, pasi sipërmarrjet gjithmonë mund të konfigurohen në mënyrë që mesazhi të publikohet në mënyrë të ngjashme
këmbimi direktosekëmbimit fanout - sipërmarrjet që përdorin
*është shumë më e shpejtë:, më të shpejtë se ato që përdorin#. këmbimin tematikmëngjeskëmbimi direkt
Shkëmbimi Fanout
ShkĂ«mbimi fanout â tĂ« gjitha mesazhet dĂ«rgohen nĂ« tĂ« gjitha radhĂ«t edhe nĂ«se nĂ« mesazh Ă«shtĂ« caktuar njĂ« çelĂ«s i rutes.
Karakteristikat:
RabbitMQnuk punon me çelësat e ruterimit dhe shablonët çka ndikon pozitivisht në performancë. Ky është më i shpejtiexchange;- të gjithë konsumatorët duhet të jenë në gjendje të procesojnë të gjitha mesazhet;
Prezantimi vizual i rrjedhës së mesazheve:

Headers Exchange
Headers exchange â dĂ«rgon mesazhe nĂ« radhĂ«t e lidhura nĂ« bazĂ« tĂ« krahasimit tĂ« çifteve (çelĂ«s, vlerĂ«) tĂ« pronĂ«s headers tĂ« dy lidhjeve dhe pronĂ«s sĂ« ngjashme tĂ« mesazhit. headers pĂ«rfaqĂ«son Dictionary.
Nëse në fjalor shtohet një çelës i veçantë x-match me vlerën any, atëherë mesazhi ruterizohet me përputhje të pjesshme të çifteve (çelës, vlerë). Ky sjellje është e ngjashme me operatorin or.
var bindingArguments = new Dictinary();
bindingArguments.add("x-match", "any");Me defekt, çelësi x-match përmban vlerën të gjitha. Kjo do të thotë se mesazhi ruterizohet me përputhje të plotë të çifteve (çelës, vlerë). Ky sjellje është e ngjashme me operatorin dhe.
Prezantimi vizual i rrjedhës së mesazheve:

Karakteristikat:
- fleksibilitet shtesë
- shpenzime shtesë për llogaritje. Të gjitha çiftet (çelës, vlerë) të atributit
headersduhet të renditen sipas emrit të çelësit para se të llogariten vlerat për ruterizimin e mesazhit. Më i ngadalshëm se llojet e tjera të exchange.
Consistent-Hashing Exchange
Ky exchange është dhe nuk është i integruar në RabbitMQ.
Consistent-hashing exchange (exchange me hashing tĂ« qĂ«ndrueshĂ«m) â pĂ«rdoret kur ka disa radhĂ« qĂ« janĂ« pritĂ«s tĂ« mundshĂ«m tĂ« mesazhit dhe kur duhet tĂ« balancohen ngarkesat midis tyre. Lidhja e mesazhit me radhĂ«n ndodh sipas peshĂ«s (njĂ« vlerĂ« stringu e kushtĂ«zuar nga 0 - n).
Pesha ekuivalente e radhĂ«ve â thotĂ« se çdo radhĂ« do tĂ« marrĂ« njĂ« numĂ«r tĂ« pĂ«rafĂ«rt mesazhesh (çdo mesazh do tĂ« vendoset vetĂ«m nĂ« njĂ« radhĂ«). Nuk ka garanci tĂ« plotĂ« pĂ«r shpĂ«rndarjen e barabartĂ« tĂ« mesazheve.
Prezantimi vizual i rrjedhës së mesazheve:

Hash llogaritet në bazë të çelësit të ruterimit ose pronës headers të mesazhit. Nëse të gjitha mesazhet që publikohen kanë çelësa të ndryshëm të ruterimit ose headers, atëherë shpërndarja do të ndodhë sipas peshës. Ndryshe do të përdoret çelësi i ruterimit ose headers.
Duhet të ndihmojë, kur kapaciteti i konsumatorit ka nevojë për rritje më të lartë sesa zgjidhja me disa konsumatorë që përdorin një radhë.
Kombinimi i exchange-ve (E2E)
Sjellja e të gjitha exchange-ve mund të kombinohet përmes lidhjes Exchange-to-Exchange (kombinimi i exchange-ve nuk përfshihet në specifikimin AMQP. Ky është një zgjerim i protokollit nga RabbitMQ).
Prezantimi vizual i rrjedhës së mesazheve:

Përmes E2E ne mund të gjejmë konfigurimin e duhur të shkallëzueshëm, i cili përmbush kërkesat ekzistuese dhe ato në rritje.
Krijimi i Exchange
Krijimi i këmbimit bëhet përmes sinhronizimit RPC kërkese sinkrone ndaj serverit. Kërkesa bëhet me metodën Exchange.Declare, e thirrur me parametrat:
- emri i këmbimit
- tipi i këmbimit
- parametra të tjerë
Shembujt e krijimit exchange me ndihmën e :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchangeâ emri i kĂ«mbimit qĂ« duam tĂ« krijojmĂ«. Emri duhet tĂ« jetĂ« unikllojiâ tipi i kĂ«mbimitdurableâ nĂ«se e vendosnitrue, nuk Ă«shtĂ« e nevojshme, madje, ajo jep njĂ« gabim sintaksorexchangedo tĂ« jetĂ« konstant. Ai do tĂ« ruhet nĂ« disk dhe do tĂ« mbijetojĂ« pas rivendosjes sĂ« serverit/brokerit. NĂ«se vlerafalse, nuk Ă«shtĂ« e nevojshme, madje, ajo jep njĂ« gabim sintaksorexchangeĂ«shtĂ« pĂ«rkohshme dhe do tĂ« fshihet, kur serveri/brokeri tĂ« rivendosetautoDeleteâ fshirja automatike.ShkĂ«mbimdo tĂ« fshihet, kur tĂ« gjitha radhĂ«t e lidhura me tĂ« tĂ« fshihenargumentsâ argumente tĂ« opcionalit. Shpesh, pĂ«rmes argumenteve pĂ«rcaktojnĂ«kĂ«mbimin alternativ(kĂ«mbim alternativ). NĂ«se mesazhi nuk mund tĂ« kalojĂ« nĂ« rrugĂ«n fillestare, ai mund tĂ« dĂ«rgohet nĂ« kĂ«mbimin alternativ pĂ«r tĂ« u orientuar nĂ« njĂ« rrugĂ« tjetĂ«r.

Nëse krijimi exchange është i mundur, atëherë serveri do t'i dërgojë klientit një RPC përgjigje Exchange.DeclareOk. Nëse krijimi nuk është i mundur (kërkesa u refuzua me Exchange.Declare), atëherë kanali do të mbyllet serveri përmes komandës asinkrone Channel.Close dhe klienti do të marrë përjashtimin , i cili do të përmbajë kodin e gabimit dhe përshkrimin e tij.
KĂ«mbimi duhet tĂ« krijohet para se tĂ« publikohet mesazhe. NĂ«se publikoni njĂ« mesazh nĂ« njĂ« kĂ«mbim qĂ« nuk ekziston â RabbitMQ do ta fshijĂ« nĂ« heshtje.
Krijimi i Exchange përmes ndërfaqes grafike
Hyni në panelin e administratorit RabbitMQ me përdoruesin guest (username: guest dhe password: guest). Ju lutemi vini re se përdoruesi guest mund të lidhet vetëm nga localhost. Tani kalojmë te skeda Këmbime dhe klikojmë Shto një këmbim të ri. Plotësojmë parametrat:

Shumica e pronarëve janë përshkruar më sipër. Këtu do të theksojmë se nëse përcaktoni Internal, atëherë këmbimi mund të përdoret vetëm për E2E. Producer nuk mund të dërgojë mesazhe në një këmbim të tillë.
Përfundim
Kur zhvilloni një sistem, është e përshtatshme të përshkruani topologjinë e përmes një grafi. Por para se të filloni ndërtimin e grafit, është e nevojshme të identifikoni rrugët me trafikun më të madh, pasi ato kërkojnë kapacitet më të lartë (performancën). Pastaj mund të klasifikoni trafikun. Dhe më pas të filloni ndërtimin.
Nëse në grafikun e ndërtuar ka një numër të kufizuar çelësash të orientimit, atëherë është e nevojshme të shikoni për disa këmbimit fanout, të cilat lidhen 1:1 me çelësin e orientimit. Kujtojmë se këmbimit fanout është më i shpejti.
Nëse numri i rrugëve të tendoset në pafundësi, atëherë duhet të kushtoni vëmendje ndaj këmbimin tematik apo, nëse modeli nuk është i nevojshëm, mund të zgjidhni këmbim të drejtpërdrejtë, pasi ai është më i shpejtë këmbimin tematik.
Kombinimet e ndryshme exchange duhet të ndihmojnë në gjetjen e konfigurimit të duhur të shkallëzueshëm, i cili përmbush kërkesat ekzistuese dhe ato në rritje të sistemit.
Numri exchange dhe radhët duhet të jenë minimale krahasuar me numrin e rrugëve.
Në artikullin e ardhshëm do të fillojmë të shqyrtojmë më në detaje Queues dhe Bindings.
Linket
Burimi: habr.com
