Exchange - exchanger utawa titik ijol-ijolan. Pesen dikirim menyang. Exchangembagekke 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.
KelinciMQ. Part 3. Understanding Queues lan Bindings
KelinciMQ. Part 4. Dealing karo apa pesen lan pigura
KelinciMQ. Part 5: Publishing lan Konsumsi Kinerja Pesen
KelinciMQ. Part 6. Ringkesan Federasi lan Modul Shovel
KelinciMQ. Part 7. Rincian babagan Sambungan lan Chanel
KelinciMQ. Part 8. RabbitMQ ing .NET
KelinciMQ. Bagean 9. Ngawasi
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:
В 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:
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:
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:
RabbitMQora 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:
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:
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:
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:
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:
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.
Yen cipta exchangebisa 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:
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.