RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana

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 Erlang process. Nezvikonzero zve scalability exchange tambo (chinongedzo kumodule ine kodhi pane iyo routing logic) mudura rakaiswa. mnesia. 1 chiuru chekuchinjana chinodya chete 1MB yekuyeuka.

Tafura yezvinyorwa

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. Chikamu 2. Kunzwisisa Kuchinjana

В 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 nemazvo 1 shoko
  • # - inogona kutsiviwa ne 0 kana mamwe mazwi

Mufananidzo unomiririra kuyerera kwemeseji:

RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana

Kutanga kubva pane shanduro RabbitMQ 2.4.0 routing algorithm ye topic exchange akatanga kushanda kusvika 145 nguva nekukurumidza. Vakawana izvi nekushandisa nzira edza kuita, iyo inosanganisira kumiririra maitiro sechimiro chemuti. Semuenzaniso ma templates a.b.c, a.*.b.c, a.#.c и b.b.c ichamiririrwa neinotevera chimiro:

RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana

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 kana fanout exchange
  • matemplate anoshandisa * nekukurumidza zvakanyanyakupfuura matemplate anoshandisa #.
  • topic exchange inononoka direct 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 inokurumidza exchange;
  • vatengi vese vanofanira kukwanisa kugadzirisa mameseji ese;

Mufananidzo unomiririra kuyerera kwemeseji:

RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana

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:

RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana

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 pfekera и haina kuvakwa mukati в 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:

RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana

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:

RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana

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.Declareyakadanwa nema parameters:

  • exchanger name
  • exchanger mhando
  • dzimwe sarudzo

Muenzaniso wekusika exchange nerubatsiro RabbitMQ.Client:

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

  • exchange - zita remutsinhanisi watinoda kugadzira. Zita racho rinofanira kuva rakasiyana nemamwe
  • type - rudzi rwekuchinjana
  • durable - kana yakaiswa true, ipapo exchange zvichava zvechigarire. Ichachengetwa pa diski uye ichakwanisa kupona sevha/broker restart. Kana kukosha false, ipapo exchange ndeyenguva pfupi uye ichadzimwa kana sevha/broker yatangwazve
  • autoDelete - otomatiki kubviswa. Exchange ichadzimwa kana mitsetse yese yakabatana yadzimwa
  • arguments nharo dzesarudzo. Kazhinji, kuburikidza nemakakatanwa akaiswa alternative exchange (imwe exchanger) Kana meseji isingakwanisi kuenda nenzira yekutanga, inogona kutumirwa kune imwe shanduko kuti ifambiswe neimwe nzira.

RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana

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 OperationInterruptedException, iyo ichange iine kodhi yekukanganisa uye tsananguro yayo.

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:

RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana

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 routing kushandisa girafu. Asi usati watanga kuvaka girafu, zvakafanira kuratidza nzira nepamusoro traffic, nekuti. vanoda yakakwirira throughput (performance). Tevere, unogona kurongedza traffic. Uye wobva watanga kuvaka.

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

Voeg