Vahetus — vahetuspunkt või vahetuspunkt. Siia saadetakse sõnumeid. Vahetus jagab sõnumi ühe või mitme järjekorra vahel. See suunab sõnumeid järjekorda loodud sidemete alusel (seosed) tema ja järjekorra vahel.
Vahetus ei ole . Skaalautuvuse tõhustamiseks exchange — see on rida (viide moodulile koos koodiga, kus asub suunamislaundus) sisseehitatud andmebaasis . 1 000 vahetuspunkti tarbib kokku vaid 1 MB mälu.
Sisukord
- RabbitMQ. Osa 3. Uurime Queues ja Bindings
- RabbitMQ. Osa 4. Uurime, mis on sõnumid ja raamid
- RabbitMQ. Osa 5. Sõnumite avaldamise ja tarbimise jõudlus
- RabbitMQ. Osa 6. Ülevaade moodulitest Federation ja Shovel
- RabbitMQ. Osa 7. Üksikasjalikult Connection ja Channel
- RabbitMQ. Osa 8. RabbitMQ .NET-is
- RabbitMQ. Osa 9. Juhendamine
Otsene vahetus
Otsene vahetus — kasutatakse, kui on vaja saata sõnum kindlasse järjekorda. Sõnum avaldatakse vahetuses kindla suunamisvõtmega ja jõuab kõikidesse järjekordadesse, mis on seotud selle vahetuse sarnase suunamisvõtmega. Suunamisvõti on tekst. Vastavuse kontrollimine toimub stringide võrdsuse kontrollimisega.
Sõnumivoogude graafiline esitus:

V rabbitmq on olemas mõisted vahetuspunkt vaikimisi. See on otsene vahetus ilma nime. Kui kasutatakse vahetuspunkti vaikimisi, siis sõnum suunatakse järjekorda, mille nimi on võrdne sõnumi suunamisvõtmega.
Teemavahetus
Teemavahetus – sarnane otsene vahetus pakub võimalust teostada valikulist suunamist, võrreldes suunamisvõtit. Kuid, sel juhul määratakse võti malli järgi. Malli loomisel kasutatakse 0 või rohkem sõna (tähed AZ ja az ja numbrid 0-9), mida eraldatakse punktiga, ja samuti märke * ja #.
*— võib asendada täpselt1sõna#— võib asendada0või rohkem sõna
Sõnumivoogude graafiline esitus:

Alates versioonist RabbitMQ 2.4.0 suunamisalgoritm teema vahetus on hakanud töötama kuni 145 kord kiirem. Nad saavutasid selle, rakendades lähenemist , mis tähendab mallide esitamist puustruktuurina. Näiteks malli a.b.c, a.*.b.c, a.#.c ja b.b.c esitatakse järgmise struktuurina:

Malliga vastavuse leidmine toimub, alustades juurest ja järgides ülalt alla.
Omadused:
- selle vahetuse rakendamine võib olla hea valik võimaliku tuleviku rakenduse arendamiseks, kuna malle saab alati kohandada, et sõnumit avaldataks samamoodi nagu
otsene vahetusvõifanout exchange - malle, mis kasutavad
*oluliselt kiirem, kui mallid, mis kasutavad#. teema vahetusaeglasemaltotsene vahetus
Fanout Exchange
Fanout exchange – kõik sõnumid jõuavad kõikidesse järjekordadesse isegi kui sõnumis on määratud suunamisvõti.
Omadused:
RabbitMQei tööta marsruutimisvõtmete ja mallidega mis mõjutab positiivselt jõudlust. See on kõige kiiremexchange;- kõik tarbijad peavad suutma töödelda kõiki sõnumeid;
Sõnumivoogude graafiline esitus:

Pealkirjade vahetus
Pealkirjade vahetus suunab sõnumid seotud järjekordadesse, tuginedes paaride (võti, väärtus) omaduste võrdlemisele pealkirjad sidumiste ja sarnaste sõnumi omaduste. pealkirjad esindab Sõnastik.
Kui sõnastikku lisada eriline võti x-match väärtusega iga, siis sõnum suunatakse osalise vastavuse korral paaride (võti, väärtus). See käitumine on sarnane operaatorile või.
var bindingArguments = new Dictinary();
bindingArguments.add("x-match", "any");Vaikimisi võti x-match sisaldab väärtust all. See tähendab, et sõnum suunatakse täieliku vastavuse korral paaride (võti, väärtus). See käitumine on sarnane operaatorile ja.
Sõnumivoogude graafiline esitus:

Omadused:
- täiendav paindlikkus
- täiendavad arvutuskoormused. Kõik paarid (võti, väärtus) atribuudist
pealkirjadpeavad olema järjestatud võtme nime järgi enne sõnumi suunamisväärtuste arvutamist. Aeglasem kui muud tüübid exchange.
Consistent-Hashing Exchange
See vahetus on ja ei ole sisseehitatud ühes RabbitMQ.
Consistent-hashing exchange (exchange kaaluga hashimisega) – kasutatakse, kui on mitu järjekorda, mis võivad potentsiaalselt sõnumi vastu võtta, ning kui on vajalik koormuse tasakaalustamine nende vahel. Sõnumi seos järjekorraga toimub kaalu alusel (tingimuslik stringiväärtus alates 0 - n).
Järjekordade ekvivalentne kaal – näitab, et igasse järjekorda jõuab umbes sama arv sõnumeid (iga sõnum paigutatakse ainult ühte järjekorda). Täielikku garantiid sõnumite ühtlasest jaotumisest ei ole.
Sõnumivoogude graafiline esitus:

Hash arvutatakse räsimise võtme või sõnumi omaduse alusel. Kui kõik avaldatud sõnumid omasid erinevaid räsimisvõtmeid või pealkirjad , siis jaotamine toimub kaalu alusel. Vastupidisel juhul kasutatakse räsimise võtit või pealkirjad, siis jaotamine toimub kaalu alusel. Vastasel juhul kasutatakse marsruutimisvõtit või pealkirjad.
Peab aitama, kui tarbija läbilaskevõime vajab kasvamist, mis on kõrgem kui lahendus mitme tarbija kasutamisel ühe järjekorraga.
Vahetusjaamade (E2E) kombineerimine
Kõigi vahetusjaamade käitumist saab kombineerida ühenduse kaudu Vahetus- ja vahetuse vahel (vahetusjaamade kombineerimine ei kuulu spetsifikatsiooni AMQP. Protokolli laiendamine RabbitMQ).
Sõnumivoogude graafiline esitus:

Arvelt E2E saame leida õige skaleeritava konfiguratsiooni, mis rahuldab nii olemasolevaid kui ka kasvavaid nõudmisi.
Vahetuse loomine
Vahetuse loomine toimub sümbioosina RPC päringuga serverisse. Päring tehakse meetodi kaudu Exchange.Declare, mida kutsutakse välja parameetritega:
- vahetuse nimi
- vahetuse tüüp
- teised parameetrid
Näide loomist exchange kasutades :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchange— vahetuse nimi, mida soovime luua. Nimi peab olema ainulaadnetype— vahetuse tüüpdurable— kui seadatrue, siisexchangeoluline. See salvestatakse kettale ja suudab ellu jääda serveri/brokkeri taaskäivitamisel. Kui väärtusfalse, siisexchangeon ajutine ja kustutatakse, kui server/brokker taaskäivitubautoDelete— automaatne kustutamine.Vahetuskustutatakse, kui kõik seotud järjekorrad on kustutatudargumentide— valikulised argumendid. Kõige sagedamini määratakse argumentide kaudualternatiivne vahetus(alternatiivne vahetus). Kui sõnum ei saa esialgsel marsruudil liikuda, saab selle saata alternatiivsele vahetusele teise marsruudi kaudu suunamiseks.

Kui loomine exchange on võimalik, siis server saadab kliendile sünkroonse RPC vastuse Exchange.DeclareOk. Kui loomine ei ole võimalik (taotluse tõttu tekkis tõrge Exchange.Declare), siis kanal suletakse serveri kaudu asünkroonse käsuga Channel.Close ja klient saab erandi , mis sisaldab veakoodi ja selle kirjeldust.
Vahetus peab olema loodud enne sõnumite avaldamist. Kui avaldate sõnumi mõnes olematus vahetuses — RabbitMQ kustutab see vaikselt selle.
Vahetuse loomine graafilise liidese kaudu
Siseneme administraatori paneeli RabbitMQ kasutaja all guest (kasutajanimi: guest ja parool: guest). Pange tähele, et kasutaja guest saab ühendust luua ainult kohalikust hostist. Nüüd liigume vahekaardile Vahetused ja klõpsame Lisa uus vahetus. Täidame omadused:

Enamik omadusi on juba eespool kirjeldatud. Siin mainime, et kui määrata Sisemine, siis saab vahetust kasutada ainult E2E. Producer ei saa sellisesse vahetusse sõnumeid saata.
Kokkuvõte
Süsteemi arendamisel on mugav kirjeldada topoloogiat graafi abil. Kuid enne graafi ehitamist on mõistlik välja tuua suured liiklusvood, kuna just need nõuavad kõrgemat läbilaskevõimet (töötlemisvõime). Seejärel saab klassifitseerida liiklust. Ja alles siis alustada ehitamist.
Kui loodud graafis on olemas lõpmatu hulk marsruudivõtmeid, siis tasub vaadata mitme fanout exchange, mis on 1:1 seotud marsruudivõtmega. Peame meeles, et fanout exchange see on kõige kiirem.
Kui marsruutide arv pulbitseb lõpmatusse, siis tasub tähelepanu pöörata teema vahetus või kui mall ei ole vajalik, siis võib valida otsevahetuse, kuna see on kiirem. teema vahetus.
Erinevate kombinatsioonide exchange peaks aitama leida õige. skaleeritav konfiguratsioon, mis vastab nii praegustele kui ka kasvavatele süsteemi nõudmistele.
Kogus exchange ja järjekordi peaks olema minimaalne võrreldes marsruutide arvuga.
Järgmises artiklis alustame Queues ja Bindings põhjalikumat uurimist.
Lingid
Allikas: habr.com
