RabbitMQ. Pati 2. Konprann Echanj yo

Exchange - echanjeur oswa pwen echanj. Mesaj yo voye ba li. Exchange distribye mesaj nan youn oswa plis ke moun kap kriye. Li wout mesaj yo nan yon keu baze sou koneksyon yo kreye (bindings) ant li menm ak keu la.

Exchange se pa Pwosesis Erlang. Pou rezon évolutivité exchange - sa a se yon liy (lyen ak yon modil ki gen kòd kote lojik routage la chita) nan baz done entegre a mnesia. 1 mil echanjeur pral konsome sèlman 1MB memwa.

Table of Contents

Echanj dirèk

Direct exchange - itilize lè sa nesesè delivre mesaj nan ke moun kap kriye espesifik. Se mesaj la pibliye nan echanjeur a ak yon espesifik kle routage epi antre nan tout moun kap kriye ki konekte ak echanjeur sa a ak yon kle routage menm jan an. Kle routage a se yon fisèl. Matching yo jwenn lè l sèvi avèk tcheke strings pou ekivalans.

Reprezantasyon grafik koule mesaj:

RabbitMQ. Pati 2. Konprann Echanj yo

В rabbitmq gen yon konsèp echanjeur default. Li se direct exchange pa gen non. Si yo itilize echanjeur default la, yo pral voye mesaj la nan yon keu ki gen yon non ki egal a kle routage mesaj.

Echanj sijè

Topic exchange - menm jan an direct exchange pèmèt routage selektif lè w konpare kle wout la. Men, nan ka sa a, yo bay kle a dapre modèl la. Lè w ap kreye yon modèl, itilize 0 oswa plis mo (lèt AZ и az ak nimewo 0-9), separe pa yon pwen, osi byen ke senbòl * и #.

  • * - ka ranplase pa egzakteman 1 mo a
  • # - ka ranplase pa 0 oswa plis mo

Reprezantasyon grafik koule mesaj:

RabbitMQ. Pati 2. Konprann Echanj yo

Depi vèsyon RabbitMQ 2.4.0 routage algorithm pou topic exchange te kòmanse travay jiskaske 145 fwa pi vit. Yo reyalize sa a lè yo prezante yon apwòch eseye aplikasyon, ki enplike reprezante modèl kòm yon estrikti pye bwa. Pou egzanp modèl a.b.c, a.*.b.c, a.#.c и b.b.c yo pral reprezante pa estrikti sa a:

RabbitMQ. Pati 2. Konprann Echanj yo

Se rechèch la pou matche ak yon modèl te pote soti kòmanse nan rasin lan ak kontinye soti anwo jouk anba.

Features:

  • itilizasyon echanjeur sa a ka vin yon bon chwa pou posib devlopman nan lavni nan aplikasyon an, paske modèl yo ka toujou Customized pou mesaj la pibliye nan menm fason an direct exchange oswa fanout exchange
  • modèl ki itilize * pi vitpase modèl ki itilize #.
  • topic exchange pi dousman direct exchange

Fanout echanj

Fanout exchange - tout mesaj yo delivre nan tout moun kap kriye menm si yo espesifye yon kle routage nan mesaj la.

Features:

  • RabbitMQ pa travay ak kle routage ak modèl ki gen yon efè pozitif sou pwodiktivite. Sa a se pi rapid la exchange;
  • tout konsomatè yo dwe kapab trete tout mesaj;

Reprezantasyon grafik koule mesaj:

RabbitMQ. Pati 2. Konprann Echanj yo

Tèt echanj

Headers exchange - Wout mesaj yo nan ke moun kap kriye ki asosye yo baze sou konparezon nan pè pwopriyete (kle, valè). headers Liaisons ak pwopwiyete mesaj menm jan an. headers se yon Dictionary<ключ, значение>.

Si ou ajoute yon kle espesyal nan diksyonè a x-match ak siyifikasyon any, Lè sa a, mesaj la ap dirije si gen yon match pasyèl nan pè (kle, valè). Konpòtman sa a sanble ak operatè a or.

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

Default kle x-match gen valè a all. Sa vle di ke mesaj la ap dirije si pè yo (kle, valè) matche egzakteman. Konpòtman sa a sanble ak operatè a and.

Reprezantasyon grafik koule mesaj:

RabbitMQ. Pati 2. Konprann Echanj yo

Features:

  • plis fleksibilite
  • anplis enfòmatik anlè. Tout pè (kle, valè) yon atribi headers yo dwe klase pa non kle anvan kalkile valè routage mesaj yo. Pi dousman pase lòt kalite echanj.

Echanj konsistan-Hashing

Échangeur sa a se ploge и pa bati nan в RabbitMQ.

Consistent-hashing exchange (echanj ak hachaj ki konsistan) - itilize lè gen plizyè moun kap kriye ki se potansyèl moun ki resevwa yon mesaj, ak lè ou bezwen balanse chaj la ant yo. Koneksyon an nan yon mesaj ak keu la fèt pa pwa (valè fisèl kondisyonèl soti nan 0 - n).

Pwa ekivalan nan ke moun kap kriye - endike ke chak keu pral resevwa apeprè menm kantite lajan an mesaj (yo pral mete chak mesaj nan yon sèl keu). Pa gen okenn garanti konplè sou distribisyon inifòm mesaj yo.

Reprezantasyon grafik koule mesaj:

RabbitMQ. Pati 2. Konprann Echanj yo

Hash kalkile dapre kle routage oswa pwopriyete headers mesaj. Si tout mesaj pibliye yo te gen diferan routage kle oswa headers, Lè sa a, distribisyon an ap fèt pa pwa. Sinon, yo pral itilize kle wout la oswa headers.

Ta dwe ede lè debi konsomatè bezwen ogmante pi wo pase yon solisyon ak konsomatè miltip lè l sèvi avèk yon sèl keu.

Konbine echanjeur (E2E)

Konpòtman an nan tout echanjeur ka konbine lè l sèvi avèk kominikasyon Echanj-a-Echanj (konbine echanjeur pa enkli nan spesifikasyon la AMQP. Sa a se yon ekstansyon pwotokòl la RabbitMQ).

Reprezantasyon grafik koule mesaj:

RabbitMQ. Pati 2. Konprann Echanj yo

Nan frais de E2E nou ka jwenn bon konfigirasyon évolutive pou satisfè kondisyon aktyèl ak k ap grandi.

Kreye echanj

Kreyasyon yon echanjeur fèt lè l sèvi avèk synchrone RPC demann nan sèvè a. Yo fè demann lan ak metòd la Exchange.Declarerele ak paramèt:

  • non echanjeur
  • kalite echanjeur
  • lòt paramèt

Egzanp kreyasyon exchange pa vle di nan RabbitMQ.Kliyan:

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

  • exchange — non echanjeur nou vle kreye a. Non an dwe inik
  • type - kalite echanjeur
  • durable - si enstale true, Lè sa a, exchange pral pèmanan. Li pral estoke sou disk epi li ka siviv yon rekòmanse sèvè / koutye. Si valè a false, Lè sa a, exchange se tanporè epi yo pral efase lè sèvè a / koutye rdemare
  • autoDelete - retire otomatik. Exchange yo pral efase lè tout moun kap kriye ki asosye ak li yo efase
  • arguments - agiman opsyonèl. Pi souvan, yo presize atravè agiman alternative exchange (echanjeur altènatif). Si yon mesaj pa ka vwayaje sou wout orijinal la, yo ka voye l nan yon echanjeur altène pou l dirije sou yon chemen diferan.

RabbitMQ. Pati 2. Konprann Echanj yo

Si kreyasyon exchange petèt, Lè sa a, sèvè a pral voye kliyan an yon synchrone RPC reponn Exchange.DeclareOk. Si kreyasyon se enposib (demann yo te refize Exchange.Declare) Lè sa a ,. chanèl la ap fèmen sèvè lè l sèvi avèk yon lòd asynchrone Channel.Close ak kliyan an pral resevwa yon eksepsyon OperationInterruptedException, ki pral genyen kòd erè a ak deskripsyon li yo.

Yon echanjeur dwe kreye anvan afiche mesaj. Si ou pibliye yon mesaj bay kèk echanjeur ki pa egziste - RabbitMQ pral tou dousman retire li.

Kreye Echanj atravè entèfas

Ale nan panèl admin RabbitMQ anba itilizatè guest (non itilizatè: guest ak modpas: guest). Tanpri sonje ke itilizatè a guest ka sèlman konekte nan localhost. Koulye a, ann ale nan tab la Exchanges epi klike sou Add a new exchange. Ranpli pwopriyete yo:

RabbitMQ. Pati 2. Konprann Echanj yo

Pifò nan pwopriyete yo te dekri pi wo a. Isit la nou sonje ke si nou mete Internal, Lè sa a, echanj la ka itilize sèlman pou E2E. Producer p ap kapab voye mesaj nan yon echanj konsa.

Konklizyon

Lè w ap devlope yon sistèm, li bon pou dekri topoloji a routage lè l sèvi avèk yon graf. Men, anvan ou kòmanse bati yon graf, li se yon valè de en chemen ak gwo trafik, paske se yo ki mande pi wo debi (pèfòmans). Apre sa, ou ka klase trafik la. Epi sèlman lè sa a kòmanse bati.

Si nan graf konstwi a genyen seri fini kle routage, Lè sa a, li vo gade nan direksyon pou plizyè fanout exchange, ki se 1:1 ki gen rapò ak kle a routage. Nou sonje sa fanout exchange pi rapid la.

Si kantite wout gen tandans enfini, Lè sa a, ou ta dwe peye atansyon sou topic exchange oswa, si modèl la pa nesesè, ou ka chwazi direct exchnge, paske li pi vit topic exchange.

Konbinezon diferan exchange ta dwe ede w jwenn youn nan dwa konfigirasyon évolutive, ki satisfè kondisyon sistèm aktyèl ak k ap grandi.

Nimewo exchange ak ke moun kap kriye yo ta dwe minim konpare ak kantite wout yo.

Nan pwochen atik la nou pral kòmanse konprann keu yo ak Liaisons an plis detay.

Referans

Sous: www.habr.com

Add nouvo kòmantè