Exchange - siltummainis vai maiÅas punkts. Uz to tiek nosÅ«tÄ«tas ziÅas. Exchange izplata ziÅu vienÄ vai vairÄkÄs rindÄs. ViÅÅ” marÅ”rutÄ ziÅojumus uz rindu pamatojoties uz izveidotajÄm saitÄm (bindings) starp to un rindu.
Exchange nav . MÄrogojamÄ«bas dÄļ exchange ir virkne (saite uz moduli ar kodu, kurÄ atrodas marÅ”rutÄÅ”anas loÄ£ika) iebÅ«vÄtajÄ datu bÄzÄ . 1 tÅ«kstotis siltummaiÅu patÄrÄs tikai 1 MB atmiÅas.
Satura
- RabbitMQ. 3. daļa. Izpratne par rindÄm un saistÄ«jumiem
- RabbitMQ. 4. daļa. Darbs ar to, kas ir ziÅojumi un rÄmji
- RabbitMQ. 5. daļa: ZiÅojumu publicÄÅ”ana un izmantoÅ”ana
- RabbitMQ. 6. daļa. FederÄcijas un lÄpstas moduļu pÄrskats
- RabbitMQ. 7. daļa. SÄ«kÄka informÄcija par savienojumu un Chanel
- RabbitMQ. 8. daļa. RabbitMQ .NET
- RabbitMQ. 9. daļa. Uzraudzība
TieÅ”Ä apmaiÅa
Direct exchange - izmanto, kad nepiecieÅ”ams nosÅ«tÄ«t ziÅojumu noteiktÄm rindÄm. ZiÅa tiek publicÄta apmainÄ«tÄjam ar konkrÄtu marÅ”rutÄÅ”anas atslÄga un nokļūst visÄs rindÄs, kas ir saistÄ«tas ar Å”o apmainÄ«tÄju ar lÄ«dzÄ«gu marÅ”rutÄÅ”anas atslÄgu. MarÅ”rutÄÅ”anas atslÄga ir virkne. SaskaÅoÅ”ana tiek veikta, izmantojot virkÅu vienlÄ«dzÄ«bas pÄrbaude.
ZiÅojumu plÅ«smas grafisks attÄlojums:

Š rabbitmq ir koncepcija noklusÄjuma siltummainis. TÄ direct exchange nav vÄrda. Ja tiek izmantots noklusÄjuma apmainÄ«tÄjs, ziÅojums tiks novirzÄ«ts uz rindu, kuras nosaukums ir vienÄds ar ziÅojumu marÅ”rutÄÅ”anas atslÄga.
TÄmu apmaiÅa
Topic exchange - lÄ«dzÄ«gs direct exchange iespÄjo selektÄ«vu marÅ”rutÄÅ”anu, salÄ«dzinot marÅ”rutÄÅ”anas atslÄgu. Bet Å”ajÄ gadÄ«jumÄ atslÄga tiek dota pÄc veidnes. Veidojot veidni, izmantojiet 0 vai vairÄk vÄrdu (burti AZ Šø az un cipariem 0-9), atdalÄ«tas ar punktu, kÄ arÄ« simboliem * Šø #.
*- var aizstÄt ar precÄ«zi1vÄrds#- var aizstÄt ar0vai vairÄk vÄrdu
ZiÅojumu plÅ«smas grafisks attÄlojums:

SÄkot no versijas RabbitMQ 2.4.0 marÅ”rutÄÅ”anas algoritms topic exchange sÄka strÄdÄt lÄ«dz 145 reizes ÄtrÄk. ViÅi to panÄca, ievieÅ”ot Å”o pieeju , kas nozÄ«mÄ veidÅu attÄloÅ”anu kÄ koka struktÅ«ru. PiemÄram, veidnes a.b.c, a.*.b.c, a.#.c Šø b.b.c tiks attÄlots ar Å”Ädu struktÅ«ru:

Modeļa atbilstÄ«ba tiek meklÄta, sÄkot no saknes un virzoties no augÅ”as uz leju.
Iezīmes:
- Ŕī siltummaiÅa izmantoÅ”ana var kļūt laba izvÄle iespÄjamai turpmÄkai lietotÅu izstrÄdei, jo veidnes vienmÄr var pielÄgot, lai ziÅojums tiktu publicÄts lÄ«dzÄ«gi
direct exchangevaifanout exchange - izmantotÄs veidnes
*daudz ÄtrÄknekÄ izmantotÄs veidnes#. topic exchangelÄnÄkdirect exchange
Fanout Exchange
Fanout exchange - visi ziÅojumi tiek piegÄdÄti uz visÄm rindÄm pat ja ziÅojumÄ ir norÄdÄ«ta marÅ”rutÄÅ”anas atslÄga.
Iezīmes:
RabbitMQnedarbojas ar marÅ”rutÄÅ”anas taustiÅiem un veidnÄm kas pozitÄ«vi ietekmÄ sniegumu. Å is ir ÄtrÄkaisexchange;- visiem patÄrÄtÄjiem jÄspÄj apstrÄdÄt visus ziÅojumus;
ZiÅojumu plÅ«smas grafisks attÄlojums:

Virsrakstu apmaiÅa
Headers exchange - novirza ziÅojumus uz saistÄ«tÄm rindÄm, pamatojoties uz (atslÄgas, vÄrtÄ«bas) rekvizÄ«tu pÄru salÄ«dzinÄjumu headers saistoÅ”s un lÄ«dzÄ«gs ziÅojuma Ä«paÅ”ums. headers ir a Dictionary<ŠŗŠ»ŃŃ, Š·Š½Š°ŃŠµŠ½ŠøŠµ>.
Ja vÄrdnÄ«cai pievienojat Ä«paÅ”u atslÄgu x-match ar nozÄ«mi any, tad ziÅojums tiek marÅ”rutÄts, ja pÄri (atslÄga, vÄrtÄ«ba) daļÄji sakrÄ«t. Å Ä« uzvedÄ«ba ir lÄ«dzÄ«ga operatoram or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");NoklusÄjuma atslÄga x-match satur vÄrtÄ«bu all. Tas nozÄ«mÄ, ka ziÅojums tiek marÅ”rutÄts, kad pÄri (atslÄga, vÄrtÄ«ba) pilnÄ«bÄ sakrÄ«t. Å Ä« uzvedÄ«ba ir lÄ«dzÄ«ga operatoram and.
ZiÅojumu plÅ«smas grafisks attÄlojums:

Iezīmes:
- papildu elastība
- papildu skaitļoÅ”anas izmaksas. Visi atribÅ«ta pÄri (atslÄga, vÄrtÄ«ba).
headerspirms ziÅojumu marÅ”rutÄÅ”anas vÄrtÄ«bu aprÄÄ·inÄÅ”anas ir jÄsakÄrto pÄc atslÄgas nosaukuma. LÄnÄk nekÄ citi apmaiÅas veidi.
Konsekventa jaukÅ”anas apmaiÅa
Å is siltummainis ir Šø nav iebÅ«vÄts в RabbitMQ.
Consistent-hashing exchange (jaukÅ”anas konsekventa apmaiÅa) ā tiek izmantota, ja ir vairÄkas rindas, kas ir potenciÄlie ziÅojuma adresÄti, un ja nepiecieÅ”ams slodzes lÄ«dzsvars starp tÄm. ZiÅojums ir saistÄ«ts ar rindu pÄc svara (nosacÄ«juma virknes vÄrtÄ«ba no 0 - n).
Ekvivalents rindu svars - norÄda, ka katra rinda saÅems apmÄram tikpat daudz ziÅas (katrs ziÅojums tiks ievietots tikai vienÄ rindÄ). Nav pilnÄ«gas garantijas vienveidÄ«gai ziÅojumu izplatīŔanai.
ZiÅojumu plÅ«smas grafisks attÄlojums:

Hash aprÄÄ·inÄts, pamatojoties uz marÅ”rutÄÅ”anas atslÄgu vai rekvizÄ«tu headers ziÅas. Ja visiem publicÄtajiem ziÅojumiem bija atŔķirÄ«gas marÅ”rutÄÅ”anas atslÄgas, vai headers, tad sadalÄ«jums notiks pÄc svara. PretÄjÄ gadÄ«jumÄ tiks izmantota marÅ”rutÄÅ”anas atslÄga vai headers.
PalÄ«dzÄs gadÄ«jumos, kad patÄrÄtÄju caurlaidspÄjai ir jÄpalielina nekÄ risinÄjumam, kurÄ vairÄki patÄrÄtÄji izmanto vienu un to paÅ”u rindu.
ApmainÄ«tÄju kombinÄcija (E2E)
Visu siltummaiÅu uzvedÄ«bu var apvienot, izmantojot komunikÄciju MaiÅa pret apmaiÅu (apmainÄ«tÄju kombinÄcija nav iekļauta specifikÄcijÄ AMQP. Å is ir protokola paplaÅ”inÄjums no sÄniem RabbitMQ).
ZiÅojumu plÅ«smas grafisks attÄlojums:

Uz rÄÄ·ina E2E mÄs varam atrast pareizo mÄrogojamo konfigurÄciju, kas atbilst gan paÅ”reizÄjÄm, gan augoÅ”ajÄm prasÄ«bÄm.
Izveidojiet apmaiÅu
Siltummainis tiek izveidots, izmantojot sinhrono RPC pieprasījums serverim. Pieprasījums tiek veikts, izmantojot metodi Exchange.Declare, ko sauc ar parametriem:
- apmainÄ«tÄja nosaukums
- siltummaiÅa tips
- citas iespÄjas
RadīŔanas piemÄrs exchange ar :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchange- apmainÄ«tÄja nosaukums, kuru vÄlamies izveidot. Nosaukumam ir jÄbÅ«t unikÄlamtype- siltummaiÅa veidsdurable- ja ir uzstÄdÄ«tstruetadexchangebÅ«s pastÄvÄ«ga. Tas tiks saglabÄts diskÄ un spÄs izturÄt servera/brokera restartÄÅ”anu. Ja vÄrtÄ«bafalsetadexchangeir Ä«slaicÄ«gs un tiks noÅemts, kad serveris/brokeris tiks restartÄtsautoDelete- automÄtiska dzÄÅ”ana.Exchangetiks dzÄsts, kad tiks dzÄstas visas saistÄ«tÄs rindasargumentsir izvÄles argumenti. VisbiežÄk, izmantojot izvirzÄ«tos argumentusalternative exchange(alternatÄ«vais siltummainis). Ja ziÅojums nevar iziet pa sÄkotnÄjo marÅ”rutu, to var nosÅ«tÄ«t uz alternatÄ«vu apmaiÅas centru, lai to novirzÄ«tu pa citu ceļu.

Ja radīŔana exchange varbÅ«t, tad serveris nosÅ«tÄ«s klientam sinhronu RPC atbildÄt Exchange.DeclareOk. Ja radīŔana nav iespÄjams (pieprasÄ«jums tika noraidÄ«ts Exchange.Declare), tad kanÄls tiks aizvÄrts serveris, izmantojot asinhronu komandu Channel.Close un klients saÅems izÅÄmumu , kurÄ bÅ«s kļūdas kods un tÄ apraksts.
Pirms ievietoÅ”anas ir jÄizveido siltummainis. Ja publicÄjat ziÅojumu kÄdam neeksistÄjoÅ”am apmainÄ«tÄjam - RabbitMQ klusi noÅemiet to.
Izveidojiet Exchange GUI
Dodieties uz admin paneli RabbitMQ zem lietotÄja guest (lietotÄjvÄrds: guest un parole: guest). LÅ«dzu, Åemiet vÄrÄ, ka lietotÄjs guest var izveidot savienojumu tikai no localhost. Tagad pÄriesim uz cilni Exchanges un noklikŔķiniet uz Add a new exchange. Aizpildiet rekvizÄ«tus:

LielÄkÄ daļa Ä«paŔību ir aprakstÄ«tas iepriekÅ”. Å eit mÄs atzÄ«mÄjam, ka, ja mÄs iestatÄm Internal, tad apmaiÅu var izmantot tikai priekÅ” E2E. Producer nevarÄs nosÅ«tÄ«t ziÅojumus uz Å”Ädu apmaiÅu.
SecinÄjums
IzstrÄdÄjot sistÄmu, ir Ärti aprakstÄ«t topoloÄ£iju izmantojot grafiku. Bet pirms sÄkt veidot grafiku, ir vÄrts izcelt ceļus ar lielu satiksmi, jo. viÅi pieprasa lielÄka caurlaidspÄja (performance). TÄlÄk varat klasificÄt satiksmi. Un tad sÄc bÅ«vÄt.
Ja konstruÄtajÄ grafikÄ eksistÄ ierobežots kopums marÅ”rutÄÅ”anas atslÄgas, tad ir vÄrts skatÄ«ties uz vairÄkiem fanout exchange, kas ir 1:1 saistÄ«ti ar marÅ”rutÄÅ”anas atslÄgu. Atcerieties, ka fanout exchange ÄtrÄkais.
Ja marÅ”rutu skaits tiecas uz bezgalÄ«bu, ir vÄrts pievÄrst uzmanÄ«bu topic exchange vai, ja veidne nav vajadzÄ«ga, tad varat izvÄlÄties direct exchnge, jo viÅÅ” ir ÄtrÄks topic exchange.
DažÄdu kombinÄcijas exchange vajadzÄtu palÄ«dzÄt jums atrast pareizo. mÄrogojama konfigurÄcija, kas atbilst gan paÅ”reizÄjÄm, gan augoÅ”ajÄm sistÄmas prasÄ«bÄm.
Skaits exchange un rindÄm jÄbÅ«t minimÄlÄm, salÄ«dzinot ar marÅ”rutu skaitu.
NÄkamajÄ rakstÄ mÄs sÄksim saprast vairÄk par rindÄm un saitÄm.
atsauces
Avots: www.habr.com
