RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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

Përmbajtja

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

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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

Prezantimi vizual i rrjedhës së mesazheve:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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 direkt ose kĂ«mbimit fanout
  • sipĂ«rmarrjet qĂ« pĂ«rdorin * Ă«shtĂ« shumĂ« mĂ« e shpejtĂ«:, mĂ« tĂ« shpejtĂ« se ato qĂ« pĂ«rdorin #.
  • kĂ«mbimin tematik mĂ«ngjes kĂ«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:

  • RabbitMQ nuk punon me çelĂ«sat e ruterimit dhe shablonĂ«t çka ndikon pozitivisht nĂ« performancĂ«. Ky Ă«shtĂ« mĂ« i shpejti exchange;
  • tĂ« gjithĂ« konsumatorĂ«t duhet tĂ« jenĂ« nĂ« gjendje tĂ« procesojnĂ« tĂ« gjitha mesazhet;

Prezantimi vizual i rrjedhës së mesazheve:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

Karakteristikat:

  • fleksibilitet shtesĂ«
  • shpenzime shtesĂ« pĂ«r llogaritje. TĂ« gjitha çiftet (çelĂ«s, vlerĂ«) tĂ« atributit headers duhet 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ë një plug-in 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:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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:

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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

//...
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Ă« unik
  • lloji — tipi i kĂ«mbimit
  • durable — nĂ«se e vendosni true, nuk Ă«shtĂ« e nevojshme, madje, ajo jep njĂ« gabim sintaksor exchange do tĂ« jetĂ« konstant. Ai do tĂ« ruhet nĂ« disk dhe do tĂ« mbijetojĂ« pas rivendosjes sĂ« serverit/brokerit. NĂ«se vlera false, nuk Ă«shtĂ« e nevojshme, madje, ajo jep njĂ« gabim sintaksor exchange Ă«shtĂ« pĂ«rkohshme dhe do tĂ« fshihet, kur serveri/brokeri tĂ« rivendoset
  • autoDelete — fshirja automatike. ShkĂ«mbim do tĂ« fshihet, kur tĂ« gjitha radhĂ«t e lidhura me tĂ« tĂ« fshihen
  • arguments — 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.

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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

RabbitMQ. Pjesa 2. Të kuptojmë Exchanges

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 orientimit 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

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster