Sugeng siang, Habr! Aku pengin nuduhake buku-buku referensi buku kawruh sing aku ngatur kanggo ngumpulake ing RabbitMQ lan condensed menyang Rekomendasi singkat lan kesimpulan.
Daftar Isi
KelinciMQ. Bagean 1. Pambuka. Erlang, AMQP lan RPC
KelinciMQ. Part 2. Understanding Exchanges
KelinciMQ. Part 3. Understanding Queues lan Bindings
KelinciMQ. Part 4. Pangerten 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
Sedhela babagan AMQP
AMQP (Advanced Message Queuing Protocol) minangka protokol mbukak kanggo ngirim pesen antarane komponen sistem. Ide dhasar yaiku subsistem individu (utawa aplikasi independen) bisa ngganti pesen kanthi cara sing sewenang-wenang liwat broker AMQP, sing nindakake rute, bisa uga njamin pangiriman, nyebarake aliran data, lan langganan jinis pesen sing dikarepake.
Protokol AMQP ngenalake telung konsep:
exchange (titik ijol-ijolan utawa ijol-ijolan) - pesen dikirim menyang. Titik ijol-ijolan mbagekke pesen ing siji utawa luwih antrian. dheweke nuntun pesen menyang antrian adhedhasar pranala sing digawe (binding) antarane dheweke lan antrian
queue (antri) - struktur data ing disk utawa ing RAM sing nyimpen pranala menyang pesen lan menehi salinan pesen consumers (kanggo konsumen)
binding (naleni) - aturan sing ngandhani titik ijol-ijolan sing antri pesen kasebut kudu mlebu
Erlang dikembangake dening perusahaan Ericsson ing pertengahan 1980-an minangka sistem wektu nyata sing disebarake, fault-tolerant, kanggo aplikasi sing mbutuhake 99,999% uptime. Erlang digunakake ing macem-macem industri lan aplikasi modern, f.eks. WhatsApp. Sampeyan bisa maca liyane ing artikel Arsitektur WhatsApp, sing dituku Facebook kanggo $ 19 milyar
Sedhela babagan RabbitMQ
KelinciMQ iku broker pesen open source. Iki nuntun pesen ing kabeh prinsip dhasar protokol AMQP diterangake ing spesifikasi. RabbitMQ ngleksanakake lan nambah protokol AMQP.
Gagasan utama model olahpesen ing RabbitMQ bab punika producer (penerbit) ora ngirim pesen langsung menyang antrian. Nyatane, lan asring, penerbit ora ngerti manawa pesen kasebut bakal dikirim menyang antrian apa wae.
Nanging, penerbit mung bisa ngirim pesen menyang ijol-ijolan. Ing tangan siji, ijol-ijolan nampa pesen saka penerbit, lan ing sisih liya, dikirim menyang antrian. Ijol-ijolan kudu ngerti persis apa sing kudu ditindakake karo pesen sing ditampa. Apa kudu ditambahake menyang antrian tartamtu? Apa kudu ditambahake menyang pirang-pirang antrian? Utawa pesen kudu digatèkaké.
Karya singkat RabbitMQ bisa diterangake kaya ing ngisor iki:
Penerbit ngirim pesen menyang ijol-ijolan tartamtu
Ijol-ijolan, sawise nampa pesen, nuntun menyang siji utawa luwih antrian sesuai karo aturan sing ana ing antarane lan antrian.
Antrian nyimpen referensi kanggo pesen iki. Pesen kasebut dhewe disimpen ing RAM utawa ing disk
Sawise konsumen siyap nampa pesen saka antrian, server nggawe salinan pesen liwat link lan ngirim
Konsumen nampa pesen lan ngirim konfirmasi menyang makelar
Broker, sawise nampa konfirmasi, mbusak salinan pesen saka antrian. Banjur mbusak saka RAM lan disk
CPR
proses RPC (remote procedure call) ndasari meh kabeh interaksi karo inti RabbitMQ. Contone, diskusi awal babagan syarat klien karo RabbitMQ, nuduhake proses tartamtu RPC. Sawise urutan iki rampung, RabbitMQ bakal siap nampa panjalukan saka klien:
Uga ing specifications AMQP loro klien lan server bisa ngetokake printah. Iki tegese klien nunggu kanggo komunikasi karo server. Prentah minangka kelas lan metode. Tuladhane, Connection.Start - cara nelpon Start kelas Connection.
Sambungan lan saluran
Kanggo pertukaran informasi kasebut antarane klien lan server, saluran. Saluran digawe ing sambungan tartamtu. Saben saluran diisolasi saka saluran liyane. Ing kasus sinkron, iku ora bisa kanggo nglakokaké printah sabanjuré nganti respon ditampa.
Supaya bisa ngirim printah ing podo karo, sampeyan kudu mbukak sawetara saluran. Saben saluran nggawe kapisah Erlang proses. Siji sambungan bisa duwe sawetara saluran (multiplexing). Kanggo saben saluran ana struktur lan obyek tartamtu ing memori. Mulane, luwih akeh saluran ana ing sambungan, ing RabbitMQ nggunakake memori luwih akeh kanggo ngatur sambungan kuwi.
Conto prasaja nggawe sambungan lan saluran nggunakake RabbitMQ.Client:
// ...
private void TryConnect()
{
var factory = new ConnectionFactory()
{
HostName = "host_name",
UserName = "user_name",
Password = "p@ssword",
// Включение автоматичекого восстановления
// соединения после сбоев сети
AutomaticRecoveryEnabled = true
};
_connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
_channel = _connection.CreateModel();
// other options
}
Mbukak sambungan anyar kanggo saben operasi banget pundung minangka iki bakal mimpin kanggo biaya dhuwur. Saluran uga kudu terus-terusan, nanging akeh kesalahan protokol sing nyebabake saluran ditutup, saengga umur saluran bisa luwih cendhek tinimbang sambungan kasebut.
Where RabbitMQ digunakake?
Ing konteks microservices, protokol AMQP lan implementasine ing RabbitMQ asring digunakake kanggo interaksi asinkron antarane layanan.
Ing konteks IIOT protokol AMQP lan implementasine ing RabbitMQ digunakake kanggo ijol-ijolan data antarane server (server-server). Uga nggunakake plugin MQTT Plugin RabbitMQ kang minangka implementasine saka protokol MQTT kanggo ngirim data antarane sensor lan server ing kacepetan kurang, lingkungan latency dhuwur (dhaptar lengkap protokol sing didhukung didaftar ing situs web proyek).
Ing artikel sabanjure kita bakal miwiti ngerteni Exchanges kanthi luwih rinci.