I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana

Exchange β€” indawo yokushintshisana noma indawo yokushintshisana. Imilayezo ithunyelwa kuyo. Exchange ihambisa umlayezo kulayini owodwa noma ngaphezulu. Yena ithumela imilayezo kulayini ngokusekelwe ekuxhumaneni okudaliwe (bindings) phakathi kwakhe nolayini.

Exchange ayiyona Inqubo ye-Erlang. Ngenxa yezizathu scalability exchange - lona umugqa (isixhumanisi semojula enekhodi lapho umzila ulele khona) kusizindalwazi esakhelwe ngaphakathi mnesia. Abashintshi abayizinkulungwane ezingu-1 bazodla inkumbulo engu-1MB kuphela.

Uhlu lokuqukethwe

  • I-RabbitMQ. Ingxenye 1. Isingeniso. Erlang, AMQP kanye ne-RPC
  • I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana
  • I-RabbitMQ. Ingxenye 3. Ukuqonda Imigqa Nezibopho
  • I-RabbitMQ. Ingxenye 4. Ukuqonda ukuthi iyini imilayezo namafreyimu
  • I-RabbitMQ. Ingxenye 5: Ukushicilelwa Komlayezo kanye Nokusebenza Kokusetshenziswa
  • I-RabbitMQ. Ingxenye 6. Ukubuyekezwa kwe-Federation kanye namamojula weFosholo
  • I-RabbitMQ. Ingxenye 7. Imininingwane mayelana Nokuxhumana kanye ne-Chanel
  • I-RabbitMQ. Ingxenye 8. RabbitMQ in .NET
  • I-RabbitMQ. Ingxenye 9. Ukuqapha

Ukuhwebelana Okuqondile

Direct exchange - esetshenziswa lapho kudingeka hambisa umlayezo kolayini abathile. Umlayezo ushicilelwe ku-exchanger ngombhalo othize ukhiye womzila futhi ingena kuyo yonke imigqa exhunywe kulesi sishintshi ngokhiye womzila ofanayo. Ukhiye womzila uyiyunithi yezinhlamvu. Ukufanisa kutholwa kusetshenziswa ukuhlola izintambo zokulinganisa.

Ukumelwa okubonakalayo kokugeleza komlayezo:

I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana

Π’ rabbitmq kukhona umqondo isishintshi esizenzakalelayo. Kuyinto direct exchange alikho igama. Uma kusetshenziswa isishintshi esimisiwe, umlayezo uzohanjiswa emgqeni onegama elilingana ne ukhiye wokuthumela umlayezo.

Ukushintshana Kwesihloko

Topic exchange - okufanayo direct exchange inika amandla umzila okhethiwe ngokuqhathanisa ukhiye womzila. Kodwa, kulokhu, ukhiye unikezwa ngokwethempulethi. Lapho udala isifanekiso, sebenzisa 0 noma amagama amaningi (izinhlamvu AZ ΠΈ az kanye nezinombolo 0-9), ehlukaniswe ichashazi, kanye nezimpawu * ΠΈ #.

  • * - ingashintshwa ncamashi 1 igama
  • # - ingashintshwa yi 0 noma amagama amaningi

Ukumelwa okubonakalayo kokugeleza komlayezo:

I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana

Kusukela version RabbitMQ 2.4.0 i-algorithm yomzila we topic exchange waqala ukusebenza kwaze kwaba 145 izikhathi ngokushesha. Lokhu bakuzuzile ngokwethula indlela yokwenza zama ukuqaliswa, okubandakanya ukumelela amaphethini njengesakhiwo somuthi. Isibonelo izifanekiso a.b.c, a.*.b.c, a.#.c ΠΈ b.b.c izomelwa yisakhiwo esilandelayo:

I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana

Ukusesha kokumatanisa iphethini kwenziwa kusukela empandeni kuqhubeke kusuka phezulu kuye phansi.

Izici:

  • ukusetshenziswa kwalesi exchanger kungaba ukukhetha okuhle kwentuthuko yesikhathi esizayo yohlelo lokusebenza, ngoba izifanekiso zingahlala zenziwe ngendlela oyifisayo ukuze umlayezo ushicilelwe ngendlela efanayo direct exchange noma fanout exchange
  • izifanekiso ezisetshenziswayo * ngokushesha okukhulukunezifanekiso ezisetshenziswayo #.
  • topic exchange Kancane direct exchange

I-Fanout Exchange

Fanout exchange - yonke imilayezo ilethwa kuyo yonke imigqa noma ngabe ukhiye womzila ucacisiwe kumlayezo.

Izici:

  • RabbitMQ ayisebenzi ngokhiye bomzila nezifanekiso okunomthelela omuhle ekukhiqizeni. Lokhu kuyashesha kakhulu exchange;
  • bonke abathengi kufanele bakwazi ukucubungula yonke imilayezo;

Ukumelwa okubonakalayo kokugeleza komlayezo:

I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana

I-Header Exchange

Headers exchange - ithumela imilayezo kolayini abahlotshaniswayo ngokusekelwe ekuqhathaniseni (ukhiye, inani) lamapheya ezakhiwo headers izibopho kanye nezakhiwo zomlayezo ezifanayo. headers kuyinto a Dictionary<ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅>.

Uma wengeza ukhiye okhethekile kusichazamazwi x-match ngencazelo any, bese umlayezo uyahanjiswa uma kukhona ukufana okuyingxenye kwamapheya (ukhiye, inani). Lokhu kuziphatha kuyafana nomsebenzisi or.

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

Ukhiye ozenzakalelayo x-match iqukethe inani all. Lokhu kusho ukuthi umlayezo uyahanjiswa uma amapheya (ukhiye, inani) afana ncamashi. Lokhu kuziphatha kuyafana nomsebenzisi and.

Ukumelwa okubonakalayo kokugeleza komlayezo:

I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana

Izici:

  • ukuguquguquka okwengeziwe
  • i-overhead eyengeziwe yokubala. Wonke (ukhiye, inani) amapheya esibaluli headers kufanele ihlungwe ngegama elingukhiye ngaphambi kokuhlanganisa amanani omzila womlayezo. Ihamba kancane kunezinye izinhlobo zokushintshisana.

I-Consistent-Hashing Exchange

Lokhu exchanger kuyinto Xhuma ΠΈ akwakhiwe phakathi Π² RabbitMQ.

Consistent-hashing exchange (ukushintshanisa nge-hashing engaguquki) - esetshenziswa uma kukhona imigqa eminingana okungenzeka kube abamukeli bomlayezo, nalapho udinga ukulinganisa umthwalo phakathi kwabo. Ukuxhumana komlayezo onomugqa kwenzeka ngesisindo (inani leyunithi yezinhlamvu enemibandela ukusuka 0 - n).

Isisindo esilinganayo solayini - sibonisa ukuthi ulayini ngamunye uzotholwa cishe inani elifanayo imilayezo (umlayezo ngamunye uzofakwa kulayini owodwa kuphela). Asikho isiqinisekiso esiphelele sokusatshalaliswa okufanayo kwemiyalezo.

Ukumelwa okubonakalayo kokugeleza komlayezo:

I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana

Hash kubalwe ngokusekelwe kukhiye womzila noma impahla headers imiyalezo. Uma yonke imilayezo eshicilelwe inokhiye bomzila abahlukene noma headers, khona-ke ukusatshalaliswa kuzokwenzeka ngesisindo. Uma kungenjalo, ukhiye womzila uzosetshenziswa noma headers.

Kufanele isize lapho ukusetshenziswa komthengi kudinga ukukhula ngaphezu kwesixazululo esinabathengi abaningi abasebenzisa ulayini owodwa.

Ukuhlanganisa ama-exchangers (E2E)

Ukuziphatha kwabo bonke abashintshisana kungahlanganiswa kusetshenziswa ukuxhumana Ukushintshanisa-kuya-Kushintshisana (ukuhlanganisa ama-exchangers akufakiwe ekucacisweni AMQP. Lesi isandiso sephrothokholi ukusuka ohlangothini RabbitMQ).

Ukumelwa okubonakalayo kokugeleza komlayezo:

I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana

Ngezindleko ze E2E singathola ukucushwa okulungile okungakala ukuze sihlangabezane nezimfuneko zamanje nezikhulayo.

Dala Ukuhwebelana

Ukwakhiwa kwe-exchanger kwenzeka kusetshenziswa i-synchronous RPC isicelo kuseva. Isicelo senziwa kusetshenziswa indlela Exchange.Declareebizwa ngamapharamitha:

  • igama lokushintshanisa
  • uhlobo lokushintshanisa
  • amanye amapharamitha

Isibonelo sendalo exchange ngosizo RabbitMQ.Client:

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

  • exchange - igama lokushintshanisa esifuna ukukudala. Igama kumele lihluke
  • type - uhlobo lokushintshisana
  • durable - uma ifakiwe true, khona-ke exchange kuzoba unomphela. Izogcinwa kudiski futhi ingasinda lapho iseva/umthengisi eqala kabusha. Uma inani false, khona-ke exchange eyesikhashana futhi izosuswa uma iseva/umdayiseli iqalwa kabusha
  • autoDelete - ukususwa okuzenzakalelayo. Exchange izosuswa uma yonke imigqa ehlotshaniswa nayo isusiwe
  • arguments - izimpikiswano ozikhethela. Ngokuvamile, bacacisa ngokusebenzisa izimpikiswano alternative exchange (i-exchanger ehlukile). Uma umlayezo ungakwazi ukuhamba ngomzila wokuqala, ungathunyelwa kwenye i-exchanger ukuze uhanjiswe ngendlela ehlukile.

I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana

Uma indalo exchange kungenzeka, bese iseva izothumela iklayenti ukuvumelanisa RPC impendulo Exchange.DeclareOk. Uma indalo akunakwenzeka (isicelo sinqatshiwe Exchange.Declare), bese isiteshi sizovala iseva esebenzisa umyalo ongavumelanisiwe Channel.Close futhi iklayenti lizothola okuhlukile I-OperationInterruptedException, ezoqukatha ikhodi yephutha nencazelo yayo.

I-exchanger kufanele idalwe ngaphambi kokuthumela imilayezo. Uma ushicilela umlayezo komunye umshintshi ongekho - RabbitMQ uzoyisusa buthule.

Ukudala Ukushintshana nge-GUI

Iya kuphaneli yomqondisi RabbitMQ ngaphansi komsebenzisi guest (igama lomsebenzisi: guest kanye nephasiwedi: guest). Sicela uqaphele ukuthi umsebenzisi guest ingaxhuma kuphela kusuka ku-localhost. Manje ake siye kuthebhu Exchanges bese uchofoza Add a new exchange. Gcwalisa izakhiwo:

I-RabbitMQ. Ingxenye 2. Ukuqonda Ukuhwebelana

Iningi lezakhiwo lichazwe ngenhla. Lapha siphawula ukuthi uma sibeka Internal, bese ukushintshanisa kungasetshenziswa kuphela E2E. Producer ngeke ikwazi ukuthumela imilayezo ekushintshisaneni okunjalo.

isiphetho

Lapho usungula uhlelo, kulula ukuchaza i-topology umzila usebenzisa igrafu. Kodwa ngaphambi kokuba uqale ukwakha igrafu, kufanelekile ukugqamisa izindlela ezinethrafikhi ephezulu, ngoba yibona abafuna ngenkani ukukhiqiza okuphezulu (ukusebenza). Okulandelayo, ungahlukanisa ithrafikhi. Bese uqala ukwakha kuphela.

Uma kugrafu eyakhiwe kukhona isethi elinganiselwe okhiye bomzila, khona-ke kufanelekile ukubheka kokuningi fanout exchange, okungu-1:1 okuhlobene nokhiye womzila. Siyakukhumbula lokho fanout exchange eshesha kakhulu.

Uma inani lemizila ijwayele ukungapheli, khona-ke kufanele unake topic exchange noma, uma isifanekiso singadingeki, ungakhetha direct exchnge, ngoba uyashesha topic exchange.

Inhlanganisela ezahlukene exchange kufanele ikusize uthole elungile ukucushwa okungaka, ehlangabezana nezidingo zesistimu zamanje nezikhulayo.

Inombolo exchange futhi imigqa kufanele ibe mincane uma iqhathaniswa nenani lemizila.

Esihlokweni esilandelayo sizoqala ukuqonda Imigqa Nezibophezelo ngokuningiliziwe.

izithenjwa

Source: www.habr.com

Engeza amazwana