RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve

Exchange - shkëmbyes ose pikë shkëmbimi. Mesazhet i dërgohen asaj. Exchange shpërndan mesazh në një ose më shumë radhë. Ai dërgon mesazhet në një radhë bazuar në lidhjet e krijuara (bindings) midis tij dhe radhës.

Exchange nuk eshte Procesi Erlang. Për arsye të shkallëzueshmërisë exchange - kjo është një linjë (lidhje me një modul me kod ku qëndron logjika e rrugëtimit) në bazën e të dhënave të integruar mnezi. 1 mijë shkëmbyes do të konsumojnë vetëm 1MB memorie.

Përmbajtje

  • RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP dhe RPC
  • RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve
  • RabbitMQ. Pjesa 3. Kuptimi i radhëve dhe lidhjeve
  • RabbitMQ. Pjesa 4. Të kuptuarit se çfarë janë mesazhet dhe kornizat
  • RabbitMQ. Pjesa 5: Publikimi i mesazheve dhe performanca e konsumit
  • RabbitMQ. Pjesa 6. Rishikimi i moduleve të Federatës dhe Lopatës
  • RabbitMQ. Pjesa 7. Detaje rreth Connection dhe Chanel
  • RabbitMQ. Pjesa 8. RabbitMQ në .NET
  • RabbitMQ. Pjesa 9. Monitorimi

Shkëmbim i drejtpërdrejtë

Direct exchange - përdoret kur është e nevojshme dërgoni mesazhin në radhë specifike. Mesazhi i publikohet shkëmbyesit me një specifikë çelësi i rrugëzimit dhe futet në të gjitha radhët që janë të lidhura me këtë shkëmbyes me një çelës të ngjashëm rrugëtimi. Çelësi i rrugëzimit është një varg. Përputhja gjendet duke përdorur duke kontrolluar vargjet për ekuivalencë.

Paraqitja grafike e rrjedhës së mesazhit:

RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve

В rabbitmq ka një koncept shkëmbyesi i paracaktuar. Ajo direct exchange pa emer. Nëse përdoret shkëmbyesi i paracaktuar, mesazhi do të dërgohet në një radhë me një emër të barabartë me çelësi i rrugëzimit të mesazheve.

Shkëmbimi i temave

Topic exchange - i ngjashëm direct exchange mundëson rrugëzimin selektiv duke krahasuar tastin e rrugëtimit. Por, në këtë rast, çelësi është dhënë sipas shabllonit. Kur krijoni një shabllon, përdorni 0 ose më shumë fjalë (shkronja AZ и az dhe numrat 0-9), të ndara me një pikë, si dhe me simbole * и #.

  • * - mund të zëvendësohet saktësisht 1 слово
  • # - mund të zëvendësohet nga 0 ose më shumë fjalë

Paraqitja grafike e rrjedhës së mesazhit:

RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve

Që nga versioni RabbitMQ 2.4.0 algoritmi i rrugëzimit për topic exchange filloi punën deri 145 herë më shpejt. Ata e arritën këtë duke prezantuar një qasje provoni zbatimin, e cila përfshin përfaqësimin e modeleve si një strukturë peme. Për shembull shabllonet a.b.c, a.*.b.c, a.#.c и b.b.c do të përfaqësohet nga struktura e mëposhtme:

RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve

Kërkimi për përputhjen e një modeli kryhet duke filluar nga rrënja dhe duke vazhduar nga lart poshtë.

Features:

  • përdorimi i këtij shkëmbyesi mund të bëhet një zgjedhje e mirë për zhvillimin e mundshëm të aplikacionit në të ardhmen, sepse shabllonet mund të personalizohen gjithmonë në mënyrë që mesazhi të publikohet në të njëjtën mënyrë direct exchange ose fanout exchange
  • shabllonet që përdorin * shumë më shpejtsesa shabllonet që përdorin #.
  • topic exchange më i ngadalshëm direct exchange

Shkëmbim Fanout

Fanout exchange - të gjitha mesazhet dërgohen në të gjitha radhët edhe nëse në mesazh është specifikuar një çelës rrugëzimi.

Features:

  • RabbitMQ nuk funksionon me çelësat dhe shabllonet e rrugëzimit e cila ka një efekt pozitiv në produktivitetin. Kjo është më e shpejta exchange;
  • të gjithë konsumatorët duhet të jenë në gjendje të përpunojnë të gjitha mesazhet;

Paraqitja grafike e rrjedhës së mesazhit:

RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve

Shkëmbimi i titujve

Headers exchange - dërgon mesazhet në radhët e lidhura bazuar në krahasimin e çifteve të vetive (çelës, vlerë). headers lidhjet dhe vetitë e ngjashme të mesazhit. headers përfaqësojnë veten Dictionary<ключ, значение>.

Nëse shtoni një çelës të veçantë në fjalor x-match me kuptim any, atëherë mesazhi drejtohet nëse ka një përputhje të pjesshme të çifteve (çelës, vlerë). Kjo sjellje është e ngjashme me operatorin or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

Çelësi i parazgjedhur x-match përmban vlerën all. Kjo do të thotë që mesazhi drejtohet nëse çiftet (çelës, vlerë) përputhen saktësisht. Kjo sjellje është e ngjashme me operatorin and.

Paraqitja grafike e rrjedhës së mesazhit:

RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve

Features:

  • fleksibilitet shtesë
  • shpenzime shtesë llogaritëse. Të gjitha çiftet (çelës, vlerë) të një atributi headers duhet të renditet sipas emrit të çelësit përpara se të llogariten vlerat e rrugëtimit të mesazhit. Më i ngadalshëm se llojet e tjera të shkëmbimit.

Consistent-Hashing Exchange

Ky shkëmbyes është shtojcë и jo i ndërtuar в RabbitMQ.

Consistent-hashing exchange (shkëmbim me hash të vazhdueshëm) - përdoret kur ka disa radhë që janë marrës të mundshëm të një mesazhi dhe kur duhet të balanconi ngarkesën midis tyre. Lidhja e një mesazhi me radhën ndodh sipas peshës (vlera e vargut të kushtëzuar nga 0 - n).

Pesha ekuivalente e radhëve - tregon se çdo radhë do të marrë përafërsisht të njëjtën sasi mesazhe (çdo mesazh do të vendoset vetëm në një radhë). Nuk ka garanci të plotë për shpërndarje uniforme të mesazheve.

Paraqitja grafike e rrjedhës së mesazhit:

RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve

Hash llogaritur në bazë të çelësit të rrugëtimit ose pronës headers mesazhe. Nëse të gjitha mesazhet e publikuara kishin çelësa të ndryshëm të rrugëtimit ose headers, atëherë shpërndarja do të ndodhë sipas peshës. Përndryshe, çelësi i rrugëzimit do të përdoret ose headers.

Duhet të ndihmojë kur xhiroja e konsumatorit duhet të rritet më e lartë se një zgjidhje me shumë konsumatorë që përdorin një radhë të vetme.

Shkëmbyesit e kombinuar (E2E)

Sjellja e të gjithë shkëmbyesve mund të kombinohet duke përdorur komunikimin Shkëmbim në Shkëmbim (këmbyesit e kombinuar nuk përfshihen në specifikim AMQP. Ky është një zgjatim i protokollit nga ana RabbitMQ).

Paraqitja grafike e rrjedhës së mesazhit:

RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve

Në kurriz të E2E ne mund të gjejmë konfigurimin e duhur të shkallëzuar për të përmbushur kërkesat aktuale dhe ato në rritje.

Krijo Exchange

Krijimi i një shkëmbyesi ndodh duke përdorur sinkron RPC kërkesë në server. Kërkesa bëhet duke përdorur metodën Exchange.Declarethirret me parametra:

  • emri i shkëmbyesit
  • lloji i shkëmbyesit
  • parametra të tjerë

Shembull krijimi exchange me anë të RabbitMQ.Klient:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange — emri i shkëmbyesit që duam të krijojmë. Emri duhet të jetë unik
  • type - lloji i shkëmbyesit
  • durable - nëse është i instaluar true, Pastaj exchange do të jetë i përhershëm. Ai do të ruhet në disk dhe mund t'i mbijetojë një rinisjeje të serverit/ndërmjetësit. Nëse vlera false, Pastaj exchange është e përkohshme dhe do të fshihet kur serveri/ndërmjetësi të riniset
  • autoDelete - heqje automatike. Exchange do të fshihet kur të fshihen të gjitha radhët e lidhura me të
  • arguments - argumente fakultative. Më shpesh, ata specifikojnë përmes argumenteve alternative exchange (shkëmbyes alternativ). Nëse një mesazh nuk mund të udhëtojë përgjatë rrugës origjinale, ai mund të dërgohet te një shkëmbyes alternativ për t'u drejtuar përgjatë një rruge tjetër.

RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve

Nëse krijimi exchange ndoshta, atëherë serveri do t'i dërgojë klientit një sinkron RPC përgjigjem Exchange.DeclareOk. Nëse krijimi është e pamundur (kërkesa u refuzua Exchange.Declare), atëherë kanali do të mbyllet server duke përdorur një komandë asinkrone Channel.Close dhe klienti do të marrë një përjashtim OperacioniInterruptedException, i cili do të përmbajë kodin e gabimit dhe përshkrimin e tij.

Duhet të krijohet një shkëmbyes përpara se të postoni mesazhe. Nëse publikoni një mesazh për ndonjë shkëmbyes që nuk ekziston - RabbitMQ do ta heqë në heshtje.

Krijimi i Exchange përmes GUI

Shkoni te paneli i administratorit RabbitMQ nën përdorues guest (emri i përdoruesit: guest dhe fjalëkalimin: guest). Ju lutemi vini re se përdoruesi guest mund të lidhet vetëm nga localhost. Tani le të shkojmë te skeda Exchanges dhe klikoni mbi Add a new exchange. Plotësoni vetitë:

RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve

Shumica e pronave janë përshkruar më sipër. Këtu vërejmë se nëse vendosim Internal, atëherë shkëmbimi mund të përdoret vetëm për E2E. Producer nuk do të jetë në gjendje të dërgojë mesazhe në një shkëmbim të tillë.

Përfundim

Kur zhvilloni një sistem, është e përshtatshme të përshkruani topologjinë drejtimi duke përdorur një grafik. Por përpara se të filloni të ndërtoni një grafik, ia vlen të nënvizoni shtigjet me trafik të lartë, sepse janë ata që kërkojnë xhiros më të lartë (performancë). Më pas, mund të klasifikoni trafikun. Dhe vetëm atëherë filloni të ndërtoni.

Nëse në grafikun e ndërtuar ka grup i kufizuar çelësat e rrugëtimit, atëherë ia vlen të shikoni drejt disa fanout exchange, të cilat janë 1:1 të lidhura me çelësin e rrugëtimit. Ne e kujtojmë atë fanout exchange me i shpejti.

Nëse numri i rrugëve priret në pafundësi, atëherë duhet t'i kushtoni vëmendje topic exchange ose, nëse shablloni nuk është i nevojshëm, mund të zgjidhni direct exchnge, sepse ai është më i shpejtë topic exchange.

Kombinime të ndryshme exchange duhet t'ju ndihmojë të gjeni të duhurin konfigurim i shkallëzuar, i cili plotëson kërkesat aktuale dhe në rritje të sistemit.

Numër exchange dhe radhët duhet të jenë minimale në krahasim me numrin e rrugëve.

Në artikullin vijues do të fillojmë të kuptojmë më në detaje Radhët dhe Lidhjet.

Referencat

Burimi: www.habr.com

Shto një koment