RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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Ă« proces Erlang. 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 mnesia. 1 mijĂ« kĂ«mbimta do tĂ« konsumojnĂ« vetĂ«m 1MB memorie.

Përmbajtja

  • RabbitMQ. Pjesa 1. Prezantimi. Erlang, AMQP dhe RPC
  • RabbitMQ. Pjesa 2. TĂ« kuptojmĂ« Exchanges
  • 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:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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Ă«sisht 1 fjalĂ«
  • # — mund tĂ« zĂ«vendĂ«sohet me 0 ose mĂ« shumĂ« fjalĂ«

Paraqitja grafike e fluxit të mesazheve:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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 implementimi trie, 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ë:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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 exchange ose ndĂ«rrimi fanout
  • sipĂ«rfaqet qĂ« pĂ«rdorin * shumĂ« mĂ« shpejt, sesa sipĂ«rfaqet qĂ« pĂ«rdorin #.
  • ndĂ«rrimin e temave mĂ« 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:

  • RabbitMQ nuk i punon me çelĂ« e rrugĂ«s dhe modele çka ndikon pozitivisht nĂ« performancĂ«. Kjo Ă«shtĂ« mĂ« e shpejta exchange;
  • tĂ« gjithĂ« konsumatorĂ«t duhet tĂ« kenĂ« mundĂ«sinĂ« tĂ« pĂ«rpunojnĂ« tĂ« gjitha mesazhet;

Paraqitja grafike e fluxit të mesazheve:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

Karakteristikat:

  • fleksibilitet shtesĂ«
  • shpenzime tĂ« tjera pĂ«r llogaritje. TĂ« gjithĂ« çiftĂ«t (çelĂ«s, vlerĂ«) tĂ« atributit headers duhen 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ë plugin 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:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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 RabbitMQ.Client:

//...
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Ă« unik
  • type — tipi i ndĂ«rrimit
  • durable — nĂ«se vendoset e vĂ«rtetĂ«, atĂ«herĂ« exchange do tĂ« jetĂ« i qĂ«ndrueshĂ«m. Do tĂ« ruhet nĂ« disk dhe do tĂ« mund tĂ« mbijetojĂ« rinisjen e serverit/brokerit. NĂ«se vlera false, atĂ«herĂ« exchange Ă«shtĂ« pĂ«rkohshme dhe do tĂ« fshihet kur serveri/brokeshi tĂ« rindezĂ«
  • autoDelete — fshirje automatike. Exchange do 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.

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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 OperationInterruptedException, 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:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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ë e ruterizimit 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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster