Exchange â vahetuspunkt vĂ”i vahetusplatvorm. Siia saadetakse sĂ”numid. Exchange jagab sĂ”numi ĂŒhe vĂ”i mitme jĂ€rjekorra. See marsruutitab sĂ”numid jĂ€rjekorda sĂ”ltuvalt loodud sidemetest (sidemed) tema ja jĂ€rjekorra vahel.
Exchange ei ole . Skaalabiltuse kaalutlustel vahetus â see on rida (link moodulile, kus asub marsruutimise loogika) sisseehitatud andmebaasis . 1 tuhande vahetuspunkti tarbimine on vaid 1MB mĂ€lu.
Sisukord
- RabbitMQ. Osa 3. Uurime Queue-sid ja Bindings-e
- RabbitMQ. Osa 4. Uurime, mis on sÔnumid ja raami
- RabbitMQ. Osa 5. SÔnumite publikatsiooni ja tarbimise tÔhusus
- RabbitMQ. Osa 6. Ălevaade modulaarsete Federation ja Shovel
- RabbitMQ. Osa 7. Ăksikasjalik teave Connection ja Chaneli kohta
- RabbitMQ. Osa 8. RabbitMQ .NET-is
- RabbitMQ. Osa 9. JĂ€lgimine
Otsene vahetus
Direct exchange â kasutatakse, kui on vaja saata sĂ”num kindlatesse jĂ€rjekordadesse. SĂ”num avaldatakse vahetuspunktis teatud marsruudivĂ”tmena ja jĂ”uab kĂ”igisse jĂ€rjekordadesse, mis on ĂŒhendatud sellega sarnase marsruudivĂ”tmega. MarsruudivĂ”ti on rida. Vastavuse otsimine toimub stringide vĂ”rdlemise abil.
SÔnumite voolu graafiline esitus:

Uues rabbitmq eksisteerib mÔisted vahetuspunkt vaikimisi. See on otsene vahetus ilma nime. Kui kasutatakse vaikimisi vahetuspunkti, siis sÔnum marsruutitakse jÀrjekorda, mille nimi vastab sÔnumi marsruudivÔtmele.
Teemavahetus
Teemavahetus â sarnaselt otsene vahetus pakub valikulist marsruutimist marsruudivĂ”tme vĂ”rdlemise kaudu. Kuid sel juhul mÀÀratakse vĂ”tme hiti kaudu. Malli loomisel kasutatakse 0 ĂŒht vĂ”i mitut sĂ”na (tĂ€hte AZ ja az ja numbreid 0-9), mis on eraldatud punktidega, samuti sĂŒmboleid * ja #.
*â saab asendada tĂ€pselt1«replica» (nĂ€iteks funktsioon snd_ctl_add_slave() vahetati vĂ€lja snd_ctl_add_replica() vastu), mis pĂ”hjustas#â saab asendada0ĂŒhe vĂ”i mitme sĂ”naga
SÔnumite voolu graafiline esitus:

Alates versioonist RabbitMQ 2.4.0 marsruutimisalgoritm teemavahetuse töötas kuni 145 kord kiiremini. Seda saavutati sokkides , mis tÀhendab mallide esitamist puustruktuurina. NÀiteks mallid a.b.c, a.*.b.c, a.#.c ja b.b.c esitatakse jÀrgmise struktuurina:

Malli vastavuse otsimine toimub, alustades juurest ja jÀrk-jÀrgult alla liikudes.
suurendatud ressursside piirangud;
- selle vahetuspunkti rakendamine vÔib olla hea valik vÔimaliku tulevase rakenduse arendamiseks, kuna malli saab alati konfigureerida nii, et sÔnum avaldatakse sarnaselt
otsene vahetusvÔifanout vahetus - mallide, mis kasutavad
*much faster:, kui mallid, mis kasutavad#. teemavahetuseaeglaseotsene vahetus
Fanout Exchange
Fanout vahetus â kĂ”ik sĂ”numid toimetatakse kĂ”ikidesse jĂ€rjekordadesse isegi kui sĂ”numis on mÀÀratud marsruudivĂ”ti.
suurendatud ressursside piirangud;
RabbitMQei toimi marsruudivÔtmete ja mallide puhul mis positiivselt mÔjutab jÔudlust. See on kiireim.vahetus;- kÔik kasutajad peavad olema vÔimelised töötlema kÔiki sÔnumeid;
SÔnumite voolu graafiline esitus:

Pealkirjade vahetus
Pealkirjade vahetus â suunab sĂ”numid seotud jĂ€rjekordadesse, vĂ”rreldes paaride (vĂ”ti, vÀÀrtus) omadusi pealkirjad seondumis- ja vastava sĂ”numi omadusega. pealkirjad on Dictionary<vĂ”ti, vÀÀrtus>.
Kui spetsiaalne vÔti lisada sÔnastikku x-match vÀÀrtusega iga, siis sÔnum suunatakse osalise vaste korral paarides (vÔti, vÀÀrtus). See kÀitumine vastab operaatorile vÔi.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");Kuva vÀÀrtus x-match sisaldab vÀÀrtust all. See tÀhendab, et sÔnum suunatakse tÀpse vaste korral paarides (vÔti, vÀÀrtus). See kÀitumine vastab operaatorile ja.
SÔnumite voolu graafiline esitus:

suurendatud ressursside piirangud;
- tÀiendav paindlikkus
- tÀiendavad arvutuslikud kulud. KÔik (vÔti, vÀÀrtus) paaride atribuudid
pealkirjadpeavad olema sorteeritud vĂ”tmepĂ€ringu alusel enne sĂ”numi suunamisvÀÀrtuste arvutamist. Aeglasem kui teised vahetuse tĂŒĂŒbid.
Consistent-Hashing Exchange
See vahetus on ja pole sisse ehitatud ja RabbitMQ.
Consistent-hashing exchange (vahetus kindla hashâiga) â kasutatakse, kui on mitu jĂ€rjekorda, mis on potentsiaalsed sĂ”numi saajad ja kui on vajalik tasakaalustada koormust nende vahel. SĂ”numi seondumine jĂ€rjekorra juurde toimub kaalu alusel (tingimuslik stringivÀÀrtus vahemikus 0 - n).
Vastav kaalu jĂ€rjekordade vahel â tĂ€hendab, et igasse jĂ€rjekorda jĂ”uab umbes sama arv sĂ”numeid (iga sĂ”num paigutatakse ainult ĂŒhte jĂ€rjekorda). TĂ€ielikku garantiid mitteĂŒhtlasest sĂ”numite jaotamisest ei ole.
SÔnumite voolu graafiline esitus:

Hash arvutatakse marsruudivÔti vÔi pealkirjad sÔnumi omadus. Kui kÔik avaldatud sÔnumid on erinevate marsruudivÔtmetega vÔi pealkirjad, siis jaotamine toimub kaalu jÀrgi. Vastupidisel juhul kasutatakse marsruudivÔtit vÔi pealkirjad.
Peab aitama, kui tarbija lĂ€bilaskevĂ”ime peab tĂ”usma ĂŒlespoole, kui lahendus, kus mitu tarbijat kasutavad ĂŒhte jĂ€rjekorda.
Vahetuste kombineerimine (E2E)
KĂ”ikide vahetuste kĂ€itumist saab kombineerida seondumisega Vahetus-ĂŒle-vahetus (vahetuste kombineerimine ei ole spetsifikatsioonis AMQP. See on ĐżŃĐŸŃĐŸĐșĐŸĐ»i laiendamine poolest RabbitMQ).
SÔnumite voolu graafiline esitus:

TÀnu E2E saame leida Ôige skaleeritava konfiguratsiooni, mis vastab nii praegustele kui ka kasvavatele nÔudmistele.
Exchange'i loomine
Exchange'i loomine toimub sĂŒnkroonsete RPC serveri pĂ€ringu kaudu. PĂ€ring tehakse meetodi Exchange.Declare, mis kutsutakse esile koos parameetritega:
- vahetuse nimi
- vahetuse tĂŒĂŒp
- muu parameeter
NĂ€ide loomise kohta vahetus kohtudes :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...vahetusâ vahetuse nimi, mille soovime luua. Nimi peab olema ainulaadnetypeâ vahetuse tĂŒĂŒpkestvadâ kui seatetrue, siisvahetusrikkaks jÀÀb. See salvestatakse kettale ja suudab ĂŒle elada serveri/brokkeri taaskĂ€ivitamise. Kui vÀÀrtusfalse, siisvahetuson ajutine ja kustutatakse, kui server/brokker taaskĂ€ivitubautoDeleteâ automaatne kustutamine.Exchangekustutatakse, kui kĂ”ik seotud jĂ€rjekorrad on eemaldatudâ valikulised argumendid. Allpool vaatame lĂ€hemalt.â valikulised argumendid. Enamasti mÀÀratakse argumentide kaudualternatiivne vahetus(alternatiivne vahetus). Kui sĂ”num ei saa algset marsruuti jĂ€rgida, saab selle saata alternatiivsele vahetusele, et suunata see teise teedpidi.

Kui loomine vahetus vĂ”ib-olla, siis server saadab kliendile sĂŒnkroonse RPC vastuse Exchange.DeclareOk. Kui loomine teostada (tekib tĂ”rge pĂ€ringus Exchange.Declare), siis kanal suletakse serveri kaudu asĂŒnkroonse kĂ€su abil Channel.Close ja klient saab erandi , mis sisaldab veakoodi ja selle kirjelduse.
Vahetus peab olema loodud enne sĂ”numite avaldamist. Kui avaldate sĂ”numi mĂ”nesse mitteeksisteerivasse vahetusse â RabbitMQ kustutab selle vaikselt.
Exchange'i loomine graafilise liidesega
Siseneme administraatori paneeli RabbitMQ kasutaja all guest (username: guest ja password: guest). Pange tĂ€hele, et kasutaja guest saab ĂŒhenduda ainult lokaalsest hostist. NĂŒĂŒd liigutame vahekaardile Vahetused ja vajutame Lisa uus vahetus. TĂ€idame omadused:

Enamik omadusi on eespool kirjeldatud. Siin tasub mÀrkida, et kui mÀÀrata Sisemine, siis saab vahetust kasutada ainult E2E. Producer ei saa sellesse vahetusse sÔnumeid saata.
KokkuvÔte
SĂŒsteemi arendamisel on mugav kirjeldada grafikuna. Kuid enne graafi loomise alustamist tasub vĂ€lja joonistada suure liiklusega teed, kuna just need nĂ”uavad kĂ”rgemat lĂ€bilaskvust (sooritusvĂ”imet). SeejĂ€rel saab liiklust klassifitseerida. Ja seejĂ€rel saab alustada ehitamist.
Kui loodud graafis on lÔpmatu kogus marsruudivÔtmeid, siis tasub vaadata mitme poole fanout vahetus, mis on 1:1 seotud marsruudivÔtmega. Peame meeles pidama, et fanout vahetus on kÔige kiirem.
Kui marsruutide arv lÀheneb lÔpmatusele, siis tasub tÀhelepanu pöörata teemavahetuse vÔi, kui mall pole vajalik, siis vÔib valida otsese vahetuse, kuna see on kiirem teemavahetuse.
Erinevate kombinatsioonide vahetus tuleb aidata leida Ă”ige skaleeritav konfiguratsioon, mis vastab nii praegustele kui ka kasvavatele sĂŒsteemi nĂ”udmistele.
Kogus vahetus ja jÀrjekordade arv peaks olema minimaalne vÔrreldes marsruutide arvuga.
JĂ€rgmises artiklis hakkame sĂŒgavamalt arvestama Ques ja Bindings'iga.
Viidatud lingid
Allikas: habr.com
