Exchange
- exchanger kana poindi yekutsinhana. Mharidzo dzinotumirwa kwairi. Exchange
anoparadzira meseji mumutsetse mumwe kana kupfuura. Iye inoendesa mameseji kumutsetse zvichibva pane zvakabatanidzwa zvakabatanidzwa (bindings
) pakati payo nemutsetse.
Exchange
kwete exchange
tambo (chinongedzo kumodule ine kodhi pane iyo routing logic) mudura rakaiswa.
Tafura yezvinyorwa
RabbitMQ. Chikamu 1. Nhanganyaya. Erlang, AMQP uye RPC RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana - RabbitMQ. Chikamu 3. Kunzwisisa Mitsetse uye Zvisungo
- RabbitMQ. Chikamu 4. Kubata nezviri mameseji uye mafuremu
- RabbitMQ. Chikamu 5: Kudhinda uye Kushandisa Mharidzo Kuita
- RabbitMQ. Chikamu 6. Mhedziso yeFederation uye Shovel Modules
- RabbitMQ. Chikamu 7. Tsanangudzo nezve Connection uye Chanel
- RabbitMQ. Chikamu 8. RabbitMQ mu.NET
- RabbitMQ. Chikamu 9. Kuongorora
Direct Exchange
Direct exchange
- inoshandiswa kana ichidiwa svitsa meseji kune chaiwo mitsetse. Iyo meseji inoburitswa kune iyo exchanger ine chaiyo kiyi yekufambisa uye inopinda mumitsetse yese inodyidzana neiyi exchanger ine kiyi yenzira yakafanana. Kiyi yekufambisa itambo. Kuenzanisa kunowanikwa kushandiswa kutarisa tambo dzekuenzanisa.
Mufananidzo unomiririra kuyerera kwemeseji:
В rabbitmq
pane pfungwa default exchanger. ichi direct exchange
hapana zita. Kana iyo default exchanger ikashandiswa, ipapo meseji ichaendeswa kumutsara une zita rakaenzana ne kiyi yekutumira meseji.
Topic Exchange
Topic exchange
- zvakafanana direct exchange
inogonesa kusarudza nzira nekuenzanisa kiyi yekufambisa. Asi, munyaya iyi, kiyi inopiwa ne template. Paunenge uchigadzira template, shandisa 0
kana mamwe mazwi (tsamba AZ
и az
uye nhamba 0-9
), akaparadzaniswa nedoti, pamwe chete nezviratidzo *
и #
.
*
- inogona kutsiviwa nemazvo1
shoko#
- inogona kutsiviwa ne0
kana mamwe mazwi
Mufananidzo unomiririra kuyerera kwemeseji:
Kutanga kubva pane shanduro RabbitMQ 2.4.0
routing algorithm ye topic exchange
akatanga kushanda kusvika 145
nguva nekukurumidza. Vakawana izvi nekushandisa nzira a.b.c
, a.*.b.c
, a.#.c
и b.b.c
ichamiririrwa neinotevera chimiro:
Kufananidzwa kwepatani kunotsvagwa kutanga kubva pamudzi kuenda kumusoro kusvika kuzasi.
Zviratidzo:
- kushandiswa kweichi exchanger kunogona kuva Sarudzo yakanaka yekugonesa kuvandudzwa kweapp, nokuti matemplate anogona kugara akagadziridzwa kuitira kuti meseji ibudiswe zvakafanana
direct exchange
kanafanout exchange
- matemplate anoshandisa
*
nekukurumidza zvakanyanyakupfuura matemplate anoshandisa#
. topic exchange
inononokadirect exchange
Fanout Exchange
Fanout exchange
- mameseji ese anounzwa kumitsetse yese kunyangwe kiyi yekufambisa yakatsanangurwa mumeseji.
Zviratidzo:
RabbitMQ
haishande nemakiyi ekufambisa uye matemplate iyo ine simba rakanaka pakuita. Iyi ndiyo inokurumidzaexchange
;- vatengi vese vanofanira kukwanisa kugadzirisa mameseji ese;
Mufananidzo unomiririra kuyerera kwemeseji:
Headers Exchange
Headers exchange
- inotungamira mameseji kune inoenderana mitsara zvichienderana nekuenzanisa kwezviviri zve (kiyi, kukosha) zvivakwa headers
inosunga uye yakafanana meseji midziyo. headers
is a Dictionary<ключ, значение>
.
Kana iwe ukawedzera kiyi yakakosha kuduramazwi x-match
zvine zvazvinoreva any
, ipapo meseji inofambiswa kana paine chikamu chemutambo we (kiyi, kukosha) maviri maviri. Maitiro aya akafanana nemushandisi or
.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");
Default kiyi x-match
ine kukosha all
. Izvi zvinoreva kuti meseji inofambiswa kana mapeya (kiyi, kukosha) anoenderana zvachose. Maitiro aya akafanana nemushandisi and
.
Mufananidzo unomiririra kuyerera kwemeseji:
Zviratidzo:
- kuwedzera kushanduka
- kuwedzera computational pamusoro. Ese mapeya (kiyi, kukosha) kwehunhu
headers
inofanira kurongwa nemazita akakosha usati waverengera kukosha kwekutumira meseji. Zvishoma pane mamwe marudzi ekuchinjana.
Inopindirana-Hashing Exchange
Uyu ndiye exchanger RabbitMQ
.
Consistent-hashing exchange
(hash-inopindirana kuchinjanisa) - inoshandiswa kana paine mitsetse yakawanda inogona kugamuchira meseji uye kana iwe uchida kurodha chiyero pakati pavo. Mharidzo inobatanidzwa nemutsara nehuremu (a conditional string value kubva 0 - n
).
Huremu hwakaenzana hwemitsara - inoratidza kuti mutsara wega wega uchagamuchira inenge mari yakafanana mameseji (meseji yega yega ichaiswa mumutsara mumwe chete). Hapana chivimbiso chakakwana chekugovera yunifomu yemeseji.
Mufananidzo unomiririra kuyerera kwemeseji:
Hash
yakaverengerwa zvichibva pakiyi yenzira kana chivakwa headers
mameseji. Kana mameseji ese akabudiswa aive akasiyana makiyi ekufambisa, kana headers
, ipapo kugoverwa kuchaitika nekurema. Zvikasadaro, kiyi yekufambisa ichashandiswa, kana headers
.
Inofanira kubatsira kana kushandiswa kwevatengi kuchida kukura kupfuura mhinduro ine vatengi vakawanda vachishandisa mutsara wakafanana.
Kubatanidza exchangers (E2E)
Maitiro evose vanochinjana vanogona kusanganiswa vachishandisa kutaurirana Kuchinjana-kune-Kuchinjana (musanganiswa wevanotsinhana hauna kubatanidzwa mune zvakatemwa AMQP
. Uku ndiko kuwedzera kweprotocol kubva parutivi RabbitMQ
).
Mufananidzo unomiririra kuyerera kwemeseji:
Pamubhadharo we E2E
isu tinogona kuwana iyo chaiyo scalable gadziriso inosangana nezvino uye kukura zvinodiwa.
Gadzira Exchange
Iyo exchanger inogadzirwa uchishandisa synchronous RPC
chikumbiro kune server. Chikumbiro chinoitwa uchishandisa nzira Exchange.Declare
yakadanwa nema parameters:
- exchanger name
- exchanger mhando
- dzimwe sarudzo
Muenzaniso wekusika exchange
nerubatsiro
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...
exchange
- zita remutsinhanisi watinoda kugadzira. Zita racho rinofanira kuva rakasiyana nemamwetype
- rudzi rwekuchinjanadurable
- kana yakaiswatrue
, ipapoexchange
zvichava zvechigarire. Ichachengetwa pa diski uye ichakwanisa kupona sevha/broker restart. Kana kukoshafalse
, ipapoexchange
ndeyenguva pfupi uye ichadzimwa kana sevha/broker yatangwazveautoDelete
- otomatiki kubviswa.Exchange
ichadzimwa kana mitsetse yese yakabatana yadzimwaarguments
nharo dzesarudzo. Kazhinji, kuburikidza nemakakatanwa akaiswaalternative exchange
(imwe exchanger) Kana meseji isingakwanisi kuenda nenzira yekutanga, inogona kutumirwa kune imwe shanduko kuti ifambiswe neimwe nzira.
Kana kusikwa exchange
zvichida, ipapo sevha inotumira mutengi a synchronous RPC
mhinduro Exchange.DeclareOk
. Kana kusikwa hazvigoneki (chikumbiro chakarambwa Exchange.Declare
), zvino gwara richavhara server uchishandisa asynchronous command Channel.Close
uye mutengi achawana kusarudzika
An exchanger inofanirwa kugadzirwa isati yatumira. Kana iwe ukaburitsa meseji kune imwe isipo exchanger - RabbitMQ
bvisa chinyararire.
Kugadzira Exchange kuburikidza neGUI
Enda kune admin panel RabbitMQ
pasi pemushandisi guest
(zita remushandisi: guest
uye password: guest
) Ndokumbira utarise kuti mushandisi guest
inogona chete kubatana kubva localhost. Zvino ngatiende kune tab Exchanges
uye tinya pa Add a new exchange
. Zadzai zvivakwa:
Zvizhinji zvezvivakwa zvakatsanangurwa pamusoro apa. Pano tinocherechedza kuti kana tikaisa Internal
, ipapo kuchinjana kunogona kushandiswa chete E2E
. Producer
haizokwanisi kutumira mameseji kune shanduko yakadai.
mhedziso
Paunenge uchigadzira system, zviri nyore kutsanangura iyo topology
Kana mugirafu rakavakwa riripo finite set makiyi ekufambisa, saka zvakakodzera kutarisa kune akati wandei fanout exchange
, iyo iri 1:1 ine chekuita nekiyi yekufambisa. Tinorangarira izvozvo fanout exchange
the fastest.
Kana nhamba yenzira zvinoita kuti infinity, zvakakodzera kuteerera topic exchange
kana, kana template isingadiwi, iwe unogona kusarudza direct exchnge
, nokuti ari kukurumidza topic exchange
.
Kusanganiswa kwakasiyana-siyana exchange
inofanira kukubatsira kuwana chaiyo scalable configuration, iyo inosangana nezvino uye kukura system zvinodiwa.
Nhamba ye exchange
uye mitsetse inofanira kuva shoma kana ichienzaniswa nehuwandu hwemakwara.
Muchinyorwa chinotevera tichatanga kunzwisisa Queues uye Bindings zvakadzama.
nezvakanyorwa
Source: www.habr.com