Exchange â kĂ«mbim ose pikĂ« kĂ«mbimi. NĂ« tĂ« dĂ«rgohen mesazhe. Exchange distribuon mesazhin nĂ« njĂ« ose disa radhĂ«. Ai rutesh mesazhet nĂ« radhĂ« bazuar nĂ« lidhjet e krijuara (bindings) ndĂ«rmjet tij dhe radhĂ«s.
Exchange nuk Ă«shtĂ« . PĂ«r arsye tĂ« shkallĂ«zueshmĂ«risĂ« exchange â kjo Ă«shtĂ« njĂ« varg (lidhen me modul me kodin ku ndodhet logjika e routing-ut) nĂ« bazĂ«n e tĂ« dhĂ«nave tĂ« integruar . 1 mijĂ« kĂ«mbimta do tĂ« konsumojnĂ« vetĂ«m 1MB memorie.
Përmbajtja
- RabbitMQ. Pjesa 3. Duke u marrë me Queues dhe Bindings
- RabbitMQ. Pjesa 4. Po shqyrtojmë çfarë janë mesazhet dhe kornizat
- RabbitMQ. Pjesa 5. Performanca e publikimit dhe konsumit të mesazheve
- RabbitMQ. Pjesa 6. Përmbledhje e modulit Federation dhe Shovel
- RabbitMQ. Pjesa 7. Detajet mbi Connection dhe Channel
- RabbitMQ. Pjesa 8. RabbitMQ në .NET
- RabbitMQ. Pjesa 9. Monitorimi
Direct Exchange
Direct exchange â pĂ«rdoret kur Ă«shtĂ« e nevojshme tĂ« dĂ«rgohet njĂ« mesazh nĂ« radhĂ« tĂ« caktuara. Mesazhi publikohet nĂ« kĂ«mbim me njĂ« çelĂ«s routing dhe shkon nĂ« tĂ« gjitha radhĂ«t qĂ« lidhen me kĂ«tĂ« kĂ«mbim me çelĂ«sin e ngjashĂ«m tĂ« routing-ut. ĂelĂ«si i routing-ut Ă«shtĂ« njĂ« varg. KĂ«rkimi i pĂ«rputhshmĂ«risĂ« ndodh pĂ«rmes kontrollit tĂ« vargjeve pĂ«r ekvivalentĂ«si.
Paraqitja grafike e fluxit të mesazheve:

Në rabbitmq ekziston nocioni këmbimi në parazgjedhje. Kjo është direct exchange pa emër. Nëse përdoret këmbimi në parazgjedhje, atëherë mesazhi do të miratohet në radhën me emrin e barabartë çelësit të routing-ut të mesazhit.
Topic Exchange
Topic exchange â ngjashĂ«m direct exchange ofron mundĂ«sinĂ« pĂ«r tĂ« realizuar rrugĂ«zim selektiv duke krahasuar çelĂ«sin e rrugĂ«zimit. Por, nĂ« kĂ«tĂ« rast, çelĂ«si Ă«shtĂ« caktuar sipĂ«rfaqes. Kur krijohet njĂ« sipĂ«rfaqe pĂ«rdoren 0 ose mĂ« shumĂ« fjalĂ« (shkronja AZ dhe az dhe numra 0-9), tĂ« ndara me pikĂ«, si dhe simbole * dhe #.
*â mund tĂ« zĂ«vendĂ«sohet me saktĂ«sisht1fjalĂ«#â mund tĂ« zĂ«vendĂ«sohet me0ose mĂ« shumĂ« fjalĂ«
Paraqitja grafike e fluxit të mesazheve:

Duke filluar nga versioni RabbitMQ 2.4.0 algoritmi i rrugëzimit për ndërrimin e temave filloi të funksionojë deri 145 më shpejt. E arritën këtë duke implementuar qasjen , i cili nënkupton paraqitjen e sipërfaqeve në formën e një strukture peme. Për shembull, sipërfaqet 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ërfaqen kryhet duke filluar nga rrenja dhe duke ndjekur nga lart poshtë.
Karakteristikat:
- aplikimi i këtij ndërrimi mund të bëhet zgjedhje e mirë për zhvillimin e mundshëm të ardhshëm të aplikacionit, pasi që sipërfaqet gjithmonë mund të konfigurohen për të publikuar mesazhe siç janë
direct exchangeosendërrimi fanout - sipërfaqet që përdorin
*shumë më shpejt, sesa sipërfaqet që përdorin#. ndërrimin e temavemë ngadalëdirect exchange
ndërrimin Fanout
ndĂ«rrimi fanout â tĂ« gjitha mesazhet dorĂ«zohen nĂ« tĂ« gjitha radhĂ«t edhe nĂ«se çelĂ«si i rrugĂ«zimit Ă«shtĂ« caktuar nĂ« mesazh.
Karakteristikat:
RabbitMQnuk i punon me çelë e rrugës dhe modele çka ndikon pozitivisht në performancë. Kjo është më e shpejtaexchange;- të gjithë konsumatorët duhet të kenë mundësinë të përpunojnë të gjitha mesazhet;
Paraqitja grafike e fluxit të mesazheve:

Headers Exchange
Headers exchange â drejton mesazhet nĂ« radhĂ«t e lidhura mbi bazĂ«n e krahasimit tĂ« çiftĂ«ve (çelĂ«s, vlerĂ«) tĂ« pronĂ«s headers lidheve dhe pronĂ«s sĂ« ngjashme tĂ« mesazhit. headers Ă«shtĂ« njĂ« Dictionary.
Nëse një çelës special do të shtohej në fjalor x-match me vlerë any, atëherë mesazhi rrugëzohet në rast të përputhjes së pjesshme të çiftëve (çelës, vlerë). Ky sjellje është e ngjashme me operatorin or.
var bindingArguments = new Dictinary();
bindingArguments.add("x-match", "any");NĂ« mĂ«nyrĂ«é»èź€ Ă§elĂ«si x-match ka vlerĂ«n all. Kjo do tĂ« thotĂ« se mesazhi rrugĂ«zohet nĂ« rast tĂ« pĂ«rputhjes sĂ« plotĂ« tĂ« çiftĂ«ve (çelĂ«s, vlerĂ«). Ky sjellje Ă«shtĂ« e ngjashme me operatorin and.
Paraqitja grafike e fluxit të mesazheve:

Karakteristikat:
- fleksibilitet shtesë
- shpenzime të tjera për llogaritje. Të gjithë çiftët (çelës, vlerë) të atributit
headersduhen radhitur sipas emrit të çelësit përpara llogaritjes së vlerave të rrugëzimit të mesazhit. Më ngadalë se llojet e tjera të exchange.
Consistent-Hashing Exchange
Ky exchange është dhe nuk është i integruar në RabbitMQ.
Consistent-hashing exchange (exchange me miratimin e kodimit) â pĂ«rdoret kur ka disa radhĂ« qĂ« janĂ« mundĂ«sisht marrĂ«s tĂ« mesazhit, dhe kur duhet tĂ« balancohet ngarkesa midis tyre. Lidhja e mesazhit me radhĂ«n ndodh sipas peshĂ«s (njĂ« vlerĂ« stringu tĂ« kushtĂ«zuar nga 0 - n).
Pesha ekuivalente e radhĂ«ve â tregon se nĂ« çdo radhĂ« do tĂ« vijĂ« pranĂ« njĂ« numri tĂ« ngjashĂ«m mesazhesh (secili mesazh do tĂ« vendoset vetĂ«m nĂ« njĂ« radhĂ«). Nuk ka garanci tĂ« plotĂ« pĂ«r shpĂ«rndarjen e barabartĂ« tĂ« mesazheve.
Paraqitja grafike e fluxit të mesazheve:

Hash llogaritet në bazë të çelësit të routingut ose pronës headers të mesazhit. Nëse të gjitha mesazhet e publikuara kishin çelësa routingu të ndryshëm apo headers, atëherë shpërndarja do të bëhet sipas peshës. Ndryshe do të përdoret çelësi i routingut ose headers.
Duhet të ndihmojë kur kapaciteti i konsumatorit ka nevojë për rritje më të lartë se zgjidhja me disa konsumatorë që përdorin një radhë.
Kombinimi i këmbimeve (E2E)
Sjellja e të gjitha këmbimeve mund të kombinohet përmes lidhjes Exchange-to-Exchange (kombinimi i këmbimeve nuk është përfshirë në specifikimin AMQP. Ky është një zgjerim i protokollit nga ana RabbitMQ).
Paraqitja grafike e fluxit të mesazheve:

Me anë të E2E mund të gjejmë konfigurimin e duhur dhe të shkallëzueshëm që përmbush si kërkesat aktuale ashtu edhe ato në rritje.
Krijimi i Exchange
Krijimi i një ndërrimi bëhet përmes një kërkese sinkrone RPC në server. Kërkesa realizohet përmes metodës Exchange.Declare, e cila thirret me parametrat:
- emri i ndërrimit
- tipi i ndërrimit
- parametra të tjerë
Shembuj krijimi exchange me ndihmën e :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchangeâ emri i ndĂ«rrimit qĂ« dĂ«shirojmĂ« tĂ« krijojmĂ«. Emri duhet tĂ« jetĂ« uniktypeâ tipi i ndĂ«rrimitdurableâ nĂ«se vendosete vĂ«rtetĂ«, atĂ«herĂ«exchangedo tĂ« jetĂ« i qĂ«ndrueshĂ«m. Do tĂ« ruhet nĂ« disk dhe do tĂ« mund tĂ« mbijetojĂ« rinisjen e serverit/brokerit. NĂ«se vlerafalse, atĂ«herĂ«exchangeĂ«shtĂ« pĂ«rkohshme dhe do tĂ« fshihet kur serveri/brokeshi tĂ« rindezĂ«autoDeleteâ fshirje automatike.Exchangedo tĂ« fshihet kur tĂ« fshihen tĂ« gjitha radhĂ«t e lidhura me tĂ«argumenteâ argumente jo tĂ« detyrueshme. Shpesh, pĂ«rmes argumenteve pĂ«rcaktojnĂ«alternative exchange(ndĂ«rrimi alternativ). NĂ«se mesazhi nuk mund tĂ« kalojĂ« pĂ«rmes rrugĂ«s fillestare, ai mund tĂ« dĂ«rgohet nĂ« ndĂ«rrimin alternativ pĂ«r tâu rritur pĂ«rmes njĂ« rruge tjetĂ«r.

Nëse krijimi exchange është e mundur, atëherë serveri do të dërgojë një përgjigje sinkrone te klienti RPC përgjigje Exchange.DeclareOk. Nëse krijimi e pamundur (ndodhi një refuzim në kërkesë Exchange.Declare), atëherë kanali do të mbyllet nga serveri përmes një komande asinkrone Channel.Close dhe klienti do të marrë një përjashtim , i cili do të përmbajë kodin e gabimit dhe përshkrimin e tij.
Bursa duhet tĂ« krijohet para botimit tĂ« mesazheve. NĂ«se publikoni njĂ« mesazh nĂ« njĂ« bursĂ« qĂ« nuk ekziston â RabbitMQ do ta fshijĂ« nĂ« heshtje atĂ«.
Krijimi i Exchange përmes ndërfaqes grafike
Hyr në panelet e administratorit RabbitMQ si përdoruesi guest (emri i përdoruesit: guest dhe fjalëkalimi: guest). Vini re se përdoruesi guest mund të lidhet vetëm nga hosti lokal. Tani kalojmë tek tab-i Shkëmbimet dhe klikojmë në Shto një bursë të re. Plotësoni pronat:

Shumica e pronave janë përshkruar më sipër. Këtu do të theksojmë se nëse caktoni Internal, atëherë bursa mund të përdoret vetëm për E2E. Prodhues nuk do të mund të dërgojë mesazhe në një bursë të tillë.
Përfundimi
Kur zhvilloni sistemin, është e përshtatshme të përshkruani topologjinë përmes një grafi. Por para se të filloni të ndërtoni grafikun, është e rëndësishme të identifikoni rrugët me trafik të lartë, sepse ato kërkojnë kapacitet më të lartë të kalimit (performanca). Më pas, mund të klasifikohet trafiku. Dhe pastaj të fillojmë ndërtimin.
Nëse në grafikun e ndërtuar ekziston një shumëzë e përfunduar e çelësave të rrugës, atëherë është e mençur të shohim drejt disa ndërrimi fanout, të cilat janë 1:1 të lidhura me çelësin e rrugës. Kujtojmë se ndërrimi fanout më i shpejti.
Nëse numri i rrugëve po i afrohet pafundësisë, atëherë është e rëndësishme të kushtojmë vëmendje ndërrimin e temave ose, nëse modelimi nuk është i nevojshëm, mund të zgjidhni shkëmbim direkt, pasi është më i shpejtë ndërrimin e temave.
Kombinimet e ndryshme exchange duhet të ndihmojnë në gjetjen e konfiguracionit të duhur të shkallëzueshëm, i cili përmbush kërkesat aktuale dhe në rritje të sistemit.
Numri exchange dhe numri i radhëve duhet të jetë minimal në krahasim me numrin e rrugëve.
Në artikullin e ardhshëm do të fillojmë të kuptojmë më në detaje mbi Queues dhe Bindings.
Linke
Burimi: habr.com
