KelinciMQ. Part 2. Understanding Exchanges

Exchange - exchanger utawa titik ijol-ijolan. Pesen dikirim menyang. Exchange mbagekke pesen ing siji utawa luwih antrian. Dheweke nuntun pesen menyang antrian adhedhasar pranala sing digawe (bindings) antarane iku lan antrian.

Exchange ora Proses Erlang. Kanggo alasan skalabilitas exchange punika senar (link kanggo modul karo kode ngendi logika nuntun) ing database ditempelake mnesia. 1 ewu exchangers bakal nggunakake mung 1MB memori.

Daftar Isi

Exchange Langsung

Direct exchange - digunakake nalika perlu ngirim pesen menyang antrian tartamtu. Pesen diterbitake kanggo exchanger karo tartamtu tombol routing lan nemu menyang kabeh antrian sing digandhengake karo exchanger iki karo tombol nuntun padha. Tombol routing yaiku string. Matching wis rampung nggunakake mriksa strings kanggo kesetaraan.

Representasi grafis saka alur pesen:

KelinciMQ. Part 2. Understanding Exchanges

В rabbitmq ana konsep exchanger gawan. Iki direct exchange ora jeneng. Yen exchanger standar digunakake, banjur pesen bakal routed menyang antrian karo jeneng witjaksono kanggo tombol nuntun pesen.

Exchange Topik

Topic exchange – padha direct exchange mbisakake nuntun selektif kanthi mbandhingake tombol nuntun. Nanging, ing kasus iki, tombol diwenehi dening cithakan. Nalika nggawe cithakan, gunakake 0 utawa luwih tembung (huruf AZ и az lan nomer 0-9), dipisahake dening titik, uga simbol * и #.

  • * - bisa diganti karo persis 1 tembung kasebut
  • # - bisa diganti dening 0 utawa luwih tembung

Representasi grafis saka alur pesen:

KelinciMQ. Part 2. Understanding Exchanges

Miwiti saka versi RabbitMQ 2.4.0 algoritma nuntun kanggo topic exchange wiwit kerja nganti 145 kaping luwih cepet. Dheweke entuk iki kanthi ngetrapake pendekatan kasebut nyoba implementasine, sing nuduhake perwakilan cithakan minangka struktur wit. Contone cithakan a.b.c, a.*.b.c, a.#.c и b.b.c bakal diwakili dening struktur ing ngisor iki:

KelinciMQ. Part 2. Understanding Exchanges

Pencocokan pola digoleki wiwit saka oyod lan saka ndhuwur nganti ngisor.

Fitur:

  • nggunakake exchanger iki bisa dadi pilihan apik kanggo pangembangan app mangsa, amarga Cithakan bisa tansah disesuaikan supaya pesen diterbitake padha direct exchange utawa fanout exchange
  • Cithakan sing nggunakake * luwih cepettinimbang template sing digunakake #.
  • topic exchange luwih alon direct exchange

Fanout Exchange

Fanout exchange - kabeh pesen dikirim menyang kabeh antrian sanajan tombol nuntun ditemtokake ing pesen.

Fitur:

  • RabbitMQ ora bisa karo tombol nuntun lan cithakan sing nduwe pengaruh positif marang kinerja. Iki paling cepet exchange;
  • kabeh konsumen kudu bisa ngolah kabeh pesen;

Representasi grafis saka alur pesen:

KelinciMQ. Part 2. Understanding Exchanges

Exchange Header

Headers exchange - ngarahake pesen menyang antrian sing gegandhengan adhedhasar perbandingan pasangan properti (kunci, nilai). headers properti pesen naleni lan padha. headers yaiku ... a Dictionary<ключ, значение>.

Yen sampeyan nambahake tombol khusus ing kamus x-match kanthi teges any, banjur pesen diruteake yen pasangan (tombol, nilai) cocog. Prilaku iki padha karo operator or.

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

Tombol standar x-match ngandhut nilai all. Iki tegese pesen wis routed nalika pasangan (tombol, Nilai) rampung cocog. Prilaku iki padha karo operator and.

Representasi grafis saka alur pesen:

KelinciMQ. Part 2. Understanding Exchanges

Fitur:

  • keluwesan tambahan
  • overhead komputasi tambahan. Kabeh pasangan (kunci, nilai) atribut headers kudu diurutake miturut jeneng kunci sadurunge ngetung nilai nuntun pesen. Luwih alon tinimbang jinis ijol-ijolan liyane.

Exchange Hashing Konsisten

Exchanger iki plugin и ora dibangun ing в RabbitMQ.

Consistent-hashing exchange (ijol-ijolan hash-konsisten) - digunakake nalika ana sawetara antrian sing potensial panampa pesen lan nalika sampeyan kudu mbukak imbangan antarane wong-wong mau. Pesen digandhengake karo antrian kanthi bobot (nilai string kondisional saka 0 - n).

Bobot sing padha karo antrian - nuduhake yen saben antrian bakal ditampa babagan jumlah sing padha pesen (saben pesen bakal dilebokake mung siji antrian). Ora ana jaminan lengkap babagan distribusi pesen sing seragam.

Representasi grafis saka alur pesen:

KelinciMQ. Part 2. Understanding Exchanges

Hash diitung adhedhasar tombol routing utawa properti headers pesen. Yen kabeh pesen sing diterbitake duwe kunci rute sing beda, utawa headers, banjur distribusi bakal kedadeyan kanthi bobot. Yen ora, tombol nuntun bakal digunakake, utawa headers.

Kudu mbantu nalika throughput konsumen kudu tuwuh luwih dhuwur tinimbang solusi karo akeh konsumen nggunakake antrian sing padha.

Kombinasi penukar (E2E)

Prilaku kabeh exchanger bisa digabungake nggunakake komunikasi Exchange-to-Exchange (kombinasi penukar ora kalebu ing spesifikasi AMQP. Iki minangka extension protokol saka sisih RabbitMQ).

Representasi grafis saka alur pesen:

KelinciMQ. Part 2. Understanding Exchanges

Ing beyo saka E2E kita bisa nemokake konfigurasi keukur tengen sing meets loro syarat saiki lan akeh.

Nggawe Exchange

Exchanger digawe nggunakake sinkron RPC njaluk menyang server. Panyuwunan digawe nggunakake metode Exchange.Declaredisebut karo paramèter:

  • jeneng exchanger
  • jinis exchanger
  • opsi liyane

Tuladha kreasi exchange kanthi pitulung RabbitMQ.Client:

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

  • exchange - jeneng exchanger sing arep kita nggawe. Jeneng kudu unik
  • type - jinis exchanger
  • durable - yen diinstal true, banjur exchange bakal permanen. Bakal disimpen ing disk lan bakal bisa urip maneh server / broker. Yen nilai false, banjur exchange sauntara lan bakal dibusak nalika server / makelar diwiwiti maneh
  • autoDelete - pambusakan otomatis. Exchange bakal dibusak nalika kabeh antrian sing gegandhengan dibusak
  • arguments minangka argumen opsional. Paling asring, liwat argumen sing disetel alternative exchange (exchanger alternatif). Yen pesen ora bisa ngliwati rute asli, pesen kasebut bisa dikirim menyang ijol-ijolan alternatif supaya bisa dilewati ing dalan sing beda.

KelinciMQ. Part 2. Understanding Exchanges

Yen cipta exchange bisa wae, banjur server bakal ngirim klien sinkron RPC njawab Exchange.DeclareOk. Yen cipta punika mokal (ana penolakan ing panyuwunan Exchange.Declare), banjur saluran bakal nutup server nggunakake printah asynchronous Channel.Close lan klien bakal entuk pangecualian OperationInterruptedException, sing bakal ngemot kode kesalahan lan katrangane.

Exchanger kudu digawe sadurunge ngirim. Yen sampeyan nerbitake pesen menyang sawetara exchanger sing ora ana - RabbitMQ meneng mbusak.

Nggawe GUI Exchange

Pindhah menyang panel admin RabbitMQ ing pangguna guest (jeneng panganggo: guest lan sandhi: guest). Elinga yen pangguna guest mung bisa nyambung saka localhost. Saiki ayo pindhah menyang tab Exchanges lan klik ing Add a new exchange. Isi properti:

KelinciMQ. Part 2. Understanding Exchanges

Umume sifat-sifat kasebut wis diterangake ing ndhuwur. Kene kita Wigati yen kita nyetel Internal, banjur ijol-ijolan mung bisa digunakake kanggo E2E. Producer ora bakal bisa ngirim pesen menyang exchange kuwi.

kesimpulan

Nalika ngembangake sistem, trep kanggo njlèntrèhaké topologi nuntun nggunakake grafik. Nanging sadurunge sampeyan miwiti mbangun grafik, iku worth nyorot dalan karo lalu lintas dhuwur, amarga. padha mbutuhake throughput sing luwih dhuwur (kinerja). Sabanjure, sampeyan bisa nggolongake lalu lintas. Lan banjur miwiti mbangun.

Yen ing grafik sing dibangun ana set winates tombol nuntun, banjur, iku worth looking menyang sawetara fanout exchange, kang 1: 1 related kanggo tombol nuntun. Elinga yen fanout exchange paling cepet.

Yen nomer rute cenderung tanpa wates, iku worth mbayar manungsa waé kanggo topic exchange utawa, yen cithakan ora perlu, sampeyan bisa milih direct exchnge, amarga dheweke luwih cepet topic exchange.

Kombinasi saka macem-macem exchange kudu mbantu sampeyan nemokake sing bener. konfigurasi scalable, sing nyukupi syarat sistem saiki lan akeh.

Jumlah exchange lan antrian kudu minimal dibandhingake nomer rute.

Ing artikel sabanjure, kita bakal ngerti luwih akeh babagan Antrian lan Binding.

referensi

Source: www.habr.com

Add a comment