RabbitMQ. Bagian 2. Ngarti bursa

Exchange - exchanger atawa titik bursa. Pesen dikirim ka dinya. Exchange nyebarkeun pesen dina hiji atawa leuwih antrian. Anjeunna rute pesen ka antrian dumasar kana tautan anu diciptakeun (bindings) antara eta jeung antrian.

Exchange sanés prosés Erlang. Pikeun alesan scalability exchange mangrupa string (tumbu ka modul jeung kode mana logika routing) dina database embedded mnesia. 1 rébu exchanger bakal meakeun ngan 1MB memori.

daptar eusi

  • RabbitMQ. Bagian 1. Bubuka. Erlang, AMQP sareng RPC
  • RabbitMQ. Bagian 2. Ngarti bursa
  • RabbitMQ. Bagian 3. Pamahaman antrian jeung Bindings
  • RabbitMQ. Bagian 4. kaayaan naon pesen na pigura
  • RabbitMQ. Bagian 5: Publishing na Consuming Performance Pesen
  • RabbitMQ. Bagian 6. Ihtisar Féderasi sarta modul sekop
  • RabbitMQ. Bagian 7. Rincian ngeunaan Connection na Chanel
  • RabbitMQ. Bagian 8. RabbitMQ di .NET
  • RabbitMQ. Bagian 9. Ngawaskeun

Bursa langsung

Direct exchange - dipaké nalika diperlukeun nganteurkeun pesen ka antrian husus. Suratna diterbitkeun ka exchanger kalawan husus konci routing tur meunang kana sagala antrian nu pakait sareng exchanger ieu kalawan konci routing sarupa. Konci routing nyaéta senar. Matching dipigawé ngagunakeun mariksa string pikeun sarua.

Répréséntasi grafis tina aliran pesen:

RabbitMQ. Bagian 2. Ngarti bursa

В rabbitmq aya konsép exchanger standar. ieu direct exchange euweuh ngaran. Lamun exchanger standar dipaké, lajeng pesen bakal routed ka antrian kalawan ngaran sarua konci routing pesen.

Bursa Topik

Topic exchange – sarupa direct exchange ngamungkinkeun routing selektif ku ngabandingkeun konci routing. Tapi, dina hal ieu, konci dibikeun ku citakan. Nalika nyieun template, make 0 atawa leuwih kecap (huruf AZ и az jeung angka 0-9), dipisahkeun ku titik, kitu ogé simbol * и #.

  • * - bisa diganti ku persis 1 kecap
  • # - bisa diganti ku 0 atawa leuwih kecap

Répréséntasi grafis tina aliran pesen:

RabbitMQ. Bagian 2. Ngarti bursa

Dimimitian ti versi RabbitMQ 2.4.0 algoritma routing pikeun topic exchange ngamimitian digawé nepi ka 145 kali leuwih gancang. Aranjeunna ngahontal ieu ku ngalaksanakeun pendekatan coba palaksanaan, nu ngakibatkeun ngagambarkeun template salaku struktur tangkal. Contona témplat a.b.c, a.*.b.c, a.#.c и b.b.c bakal digambarkeun ku struktur handap:

RabbitMQ. Bagian 2. Ngarti bursa

Pola anu cocog dipilarian mimitian ti akar sareng angkat ti luhur ka handap.

fitur:

  • pamakéan exchanger ieu bisa jadi pilihan alus pikeun ngembangkeun aplikasi nu bakal datang, sabab témplat salawasna tiasa disaluyukeun supados pesenna diterbitkeun sami direct exchange atawa fanout exchange
  • témplat anu ngagunakeun * leuwih gancangti témplat anu ngagunakeun #.
  • topic exchange Lalaunan direct exchange

Bursa Fanout

Fanout exchange - kabéh pesen anu dikirimkeun ka sadaya antrian sanajan konci routing dieusian dina suratna.

fitur:

  • RabbitMQ teu dianggo kalayan kenop routing na template nu boga pangaruh positif kana kinerja. Ieu nu panggancangna exchange;
  • sadaya konsumen kedah tiasa ngolah sadaya pesen;

Répréséntasi grafis tina aliran pesen:

RabbitMQ. Bagian 2. Ngarti bursa

Bursa lulugu

Headers exchange - ngarahkeun pesen ka antrian patali dumasar kana ngabandingkeun pasangan (konci, nilai) sipat headers ngariung jeung sipat pesen sarupa. headers eta ngawakilan Dictionary<ключ, значение>.

Upami anjeun nambihan konci khusus kana kamus x-match kalawan harti any, teras pesenna dialihkeun upami pasangan (konci, nilai) sawaréh cocog. Paripolah ieu sami sareng operator or.

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

Konci standar x-match ngandung nilai all. Ieu ngandung harti yén pesen ieu routed nalika pasangan (konci, nilai) lengkep cocog. Paripolah ieu sami sareng operator and.

Répréséntasi grafis tina aliran pesen:

RabbitMQ. Bagian 2. Ngarti bursa

fitur:

  • kalenturan tambahan
  • overhead komputasi tambahan. Sadaya pasangan (konci, nilai) tina atribut headers kudu diurutkeun dumasar ngaran konci saméméh ngitung nilai routing pesen. Laun ti jenis bursa séjén.

Konsisten Hashing Exchange

exchanger Ieu plugin и teu diwangun dina в RabbitMQ.

Consistent-hashing exchange (Hash-konsisten bursa) - dipaké nalika aya sababaraha antrian anu poténsial panarima pesen na mun anjeun kudu ngamuat kasaimbangan antara aranjeunna. Suratna pakait sareng antrian ku beurat (nilai string kondisional ti 0 - n).

beurat sarua antrian - nunjukkeun yén unggal antrian bakal nampa ngeunaan jumlah sarua pesen (unggal pesen bakal nempatkeun kana hiji antrian). Henteu aya jaminan lengkep ngeunaan distribusi pesen anu seragam.

Répréséntasi grafis tina aliran pesen:

RabbitMQ. Bagian 2. Ngarti bursa

Hash diitung dumasar kana konci routing atawa harta headers talatah. Upami sadaya pesen anu diterbitkeun ngagaduhan konci rute anu béda, atanapi headers, mangka distribusi bakal lumangsung ku beurat. Upami teu kitu, konci routing bakal dipaké, atawa headers.

Kedah mantuan lamun throughput konsumen kudu tumuwuh leuwih luhur ti solusi kalawan sababaraha pamakéna ngagunakeun antrian sarua.

Kombinasi exchanger (E2E)

Paripolah sadaya exchanger bisa digabungkeun ngagunakeun komunikasi Exchange-to-Tukeur (kombinasi exchanger teu kaasup dina spésifikasi AMQP. Ieu extension protokol ti gigir RabbitMQ).

Répréséntasi grafis tina aliran pesen:

RabbitMQ. Bagian 2. Ngarti bursa

Ngaluarkeun biaya tina E2E urang bisa manggihan konfigurasi scalable katuhu nu meets duanana sarat ayeuna jeung tumuwuh.

Jieun Exchange

Exchanger dijieun maké sinkron RPC pamundut ka server. Paménta dilakukeun nganggo metodeu Exchange.Declare, disebut kalayan parameter:

  • ngaran exchanger
  • tipe exchanger
  • pilihan séjén

Conto ciptaan exchange kalayan bantosan RabbitMQ.Client:

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

  • exchange - nami exchanger nu urang rék nyieun. Ngaran kudu unik
  • type - tipe exchanger
  • durable - lamun dipasang trueterus exchange bakal permanén. Éta bakal disimpen dina disk sareng bakal tiasa salamet nalika ngamimitian deui server / calo. Lamun nilai falseterus exchange nyaeta samentara sarta bakal dihapus nalika server / calo ieu restarted
  • autoDelete - ngahapus otomatis. Exchange bakal dipupus nalika sadaya antrian pakait dihapus
  • arguments mangrupa argumen pilihan. Paling sering, ngaliwatan argumen diatur alternative exchange (exchanger alternatif). Lamun pesen teu bisa ngaliwatan jalur aslina, éta bisa dikirim ka bursa alternatif pikeun routed sapanjang jalur béda.

RabbitMQ. Bagian 2. Ngarti bursa

Lamun ciptaan exchange nyaéta mungkin, lajeng server bakal ngirim klien a sinkron RPC jawaban Exchange.DeclareOk. Lamun ciptaan teu mungkin (aya panolakan dina pamundut Exchange.Declare), saterusna saluran bakal nutup server ngagunakeun paréntah Asynchronous Channel.Close sareng klien bakal nampi pengecualian OperationInterruptedException, anu bakal ngandung kodeu kasalahan sareng pedaranana.

Hiji exchanger kudu dijieun saméméh posting. Lamun anjeun nyebarkeun pesen ka sababaraha exchanger non-existent - RabbitMQ cicingeun miceun.

Jieun GUI Exchange

Pindah ka panel admin RabbitMQ handapeun pamaké guest (ngaran pamaké: guest sareng kecap akses: guest). Punten dicatet yén pangguna guest ngan bisa nyambung ti localhost. Ayeuna hayu urang buka tab Exchanges teras klik dina Add a new exchange. Eusian sipat:

RabbitMQ. Bagian 2. Ngarti bursa

Kalolobaan sipat geus ditétélakeun di luhur. Di dieu urang dicatet yén lamun urang diatur Internal, mangka bursa ngan bisa dipaké pikeun E2E. Producer moal bisa ngirim pesen ka bursa misalna hiji.

kacindekan

Nalika ngembangkeun sistem, éta merenah pikeun ngajelaskeun topologi routing ngagunakeun grafik. Tapi saencan Anjeun ngamimitian ngawangun grafik, éta patut nyorot jalur kalawan lalulintas tinggi, sabab. aranjeunna merlukeun throughput luhur (kinerja). Salajengna, anjeun tiasa mengklasifikasikan lalu lintas. Lajeng ngawitan ngawangun.

Lamun dina grafik diwangun aya set wates konci routing, lajeng, eta sia pilari ka arah sababaraha fanout exchange, nu 1: 1 patali konci routing. Inget éta fanout exchange panggancangna.

Lamun jumlah ruteu condong ka takterhingga, éta patut nengetan topic exchange atawa, lamun template henteu diperlukeun, lajeng Anjeun bisa milih direct exchnge, sabab anjeunna langkung gancang topic exchange.

Kombinasi tina rupa-rupa exchange kedah ngabantosan anjeun mendakan anu leres. konfigurasi scalable, nu minuhan duanana sarat sistem ayeuna jeung tumuwuh.

jumlah exchange sarta antrian kedah minimal dibandingkeun jumlah ruteu.

Dina artikel salajengna, urang bakal ngawitan ngartos langkung seueur ngeunaan Antrian sareng Bindings.

rujukan

sumber: www.habr.com

Tambahkeun komentar