Exchange - echanjeur oswa pwen echanj. Mesaj yo voye ba li. Exchangedistribye 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.
RabbitMQ. Pati 3. Konprann ke moun kap kriye ak Liaisons
RabbitMQ. Pati 4. Konprann ki mesaj ak ankadreman yo ye
RabbitMQ. Pati 5: Piblikasyon Mesaj ak Pèfòmans Konsomasyon
RabbitMQ. Pati 6. Revizyon modil Federasyon an ak Pèl
RabbitMQ. Pati 7. Detay sou Koneksyon ak Chanel
RabbitMQ. Pati 8. RabbitMQ nan .NET
RabbitMQ. Pati 9. Siveyans
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 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:
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:
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:
RabbitMQpa 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:
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:
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.
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:
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:
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:
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.
Si kreyasyon exchangepetè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:
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.