Exchange - shkëmbyes ose pikë shkëmbimi. Mesazhet i dërgohen asaj. Exchangeshpë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.
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 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:
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:
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:
RabbitMQnuk 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:
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:
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:
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:
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:
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.
Nëse krijimi exchangendoshta, 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ë:
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.