Selamat siang, Habr! Saya ingin berbagi sebuah buku referensi ilmu pengetahuan yang berhasil saya kumpulkan RabbitMQ dan diringkas menjadi rekomendasi dan kesimpulan singkat.
daftar isi
KelinciMQ. Bagian 1. Pendahuluan. Erlang, AMQP dan RPC
KelinciMQ. Bagian 2. Memahami Pertukaran
RabbitMQ. Bagian 3. Pengertian Antrian dan Binding
KelinciMQ. Bagian 4. Memahami apa itu pesan dan bingkai
KelinciMQ. Bagian 5: Penerbitan Pesan dan Kinerja Konsumsi
KelinciMQ. Bagian 6. Tinjauan modul Federasi dan Sekop
KelinciMQ. Bagian 7. Detail tentang Koneksi dan Chanel
KelinciMQ. Bagian 8. RabbitMQ di .NET
KelinciMQ. Bagian 9. Pemantauan
Secara singkat tentang AMQP
AMQP (Advanced Message Queuing Protocol) adalah protokol terbuka untuk mengirimkan pesan antar komponen sistem. Ide dasarnya adalah bahwa masing-masing subsistem (atau aplikasi independen) dapat bertukar pesan dengan cara apa pun melalui broker AMQP, yang melakukan perutean, mungkin menjamin pengiriman, mendistribusikan aliran data, dan berlangganan jenis pesan yang diinginkan.
Protokol AMQP memperkenalkan tiga konsep:
exchange (titik pertukaran atau pertukaran) - pesan dikirim ke sana. Titik pertukaran mendistribusikan pesan dalam satu atau lebih antrian. Dia merutekan pesan ke antrian berdasarkan koneksi yang dibuat (binding) antara dia dan antrian
queue (antrian) - struktur data pada disk atau RAM itu menyimpan tautan ke pesan dan memberikan salinan pesan consumers (kepada konsumen)
binding (mengikat) - aturan itu memberi tahu titik pertukaran ke antrian mana pesan-pesan ini harus masuk
Erlang dikembangkan oleh perusahaan Ericsson pada pertengahan 1980an sebagai sistem real-time yang terdistribusi, toleran terhadap kesalahan, untuk aplikasi yang memerlukan waktu aktif 99,999%. Erlang digunakan di berbagai industri dan aplikasi modern, misalnya. WhatsApp. Anda dapat membaca lebih lanjut di artikel Arsitektur WhatsApp, yang dibeli Facebook seharga $19 miliar
Secara singkat tentang RabbitMQ
RabbitMQ adalah broker pesan sumber terbuka. Ini merutekan pesan berdasarkan semua prinsip dasar protokol AMQP dijelaskan dalam spesifikasi. RabbitMQ mengimplementasikan dan melengkapi protokol AMQP.
Ide utama dari model perpesanan di RabbitMQ hal adalah producer (penerbit) tidak mengirim pesan langsung ke antrian. Faktanya, dan cukup sering, penerbit bahkan tidak mengetahui apakah pesannya akan dikirimkan ke antrian mana pun.
Sebaliknya, penerbit hanya dapat mengirim pesan ke bursa. Di satu sisi, pertukaran menerima pesan dari penerbit, dan di sisi lain, mengirimkannya ke antrian. Pertukaran harus tahu persis apa yang harus dilakukan terhadap pesan yang diterimanya. Haruskah itu ditambahkan ke antrian tertentu? Haruskah itu ditambahkan ke beberapa antrian? Atau pesan itu harus diabaikan.
Pekerjaan singkat RabbitMQ dapat digambarkan sebagai berikut:
Penerbit mengirimkan pesan ke bursa tertentu
Pertukaran, setelah menerima pesan, mengarahkannya ke satu atau lebih antrian sesuai dengan aturan yang mengikat antara pesan tersebut dan antrian
Antrian menyimpan referensi ke pesan ini. Pesan itu sendiri disimpan di RAM atau di disk
Setelah konsumen siap menerima pesan dari antrian, server membuat salinan pesan melalui tautan dan mengirimkannya
Konsumen menerima pesan dan mengirimkan konfirmasi kepada broker
Broker, setelah menerima konfirmasi, menghapus salinan pesan dari antrian. Kemudian menghapus dari RAM dan disk
RPC
proses RPC (panggilan prosedur jarak jauh) mendasari hampir semua interaksi dengan inti RabbitMQ. Misalnya diskusi awal tentang persyaratan klien dengan RabbitMQ, menunjukkan proses tertentu RPC. Setelah rangkaian ini selesai, RabbitMQ akan siap menerima permintaan dari klien:
Juga dalam spesifikasinya AMQP baik klien dan server dapat mengeluarkan perintah. Artinya klien sedang menunggu untuk berkomunikasi dengan server. Perintah adalah kelas dan metode. Misalnya, Connection.Start β pemanggilan metode Start kelas Connection.
Koneksi dan saluran
Untuk pertukaran informasi antara klien dan server, Π°Π½Π°Π»Ρ. Saluran dibuat di dalam koneksi tertentu. Setiap saluran diisolasi dari saluran lainnya. Dalam kasus sinkron, perintah berikutnya tidak dapat dijalankan hingga respons diterima.
Untuk dapat mengirimkan perintah secara paralel, Anda harus membuka beberapa saluran. Setiap saluran dibuat terpisah Erlang proses. Satu koneksi dapat memiliki banyak saluran (multiplexing). Untuk setiap saluran terdapat struktur dan objek tertentu dalam memori. Oleh karena itu, semakin banyak saluran yang ada dalam suatu koneksi, semakin besar RabbitMQ menggunakan lebih banyak memori untuk mengelola koneksi seperti itu.
Contoh sederhana membuat koneksi dan saluran menggunakan RabbitMQ.Klien:
Membuka koneksi baru untuk setiap operasi sangat tidak disarankan karena hal ini akan menyebabkan biaya yang tinggi. Saluran juga harus persisten, tetapi banyak kesalahan protokol yang menyebabkan saluran ditutup, sehingga masa pakai saluran mungkin lebih pendek dibandingkan masa pakai sambungan.
Di mana RabbitMQ digunakan?
Dalam konteks layanan mikro, protokol AMQP dan implementasinya di RabbitMQ sering digunakan untuk interaksi asinkron antar layanan.
Dalam konteksnya IIOT protokol AMQP dan implementasinya di RabbitMQ digunakan untuk pertukaran data antar server (server-server). Gunakan juga pluginnya Plugin MQTT RabbitMQ yang merupakan implementasi dari protokol MQTT untuk transmisi data antara sensor dan server di lingkungan berkecepatan rendah dan latensi tinggi (daftar lengkap protokol yang didukung tercantum di situs web proyek).
Pada artikel selanjutnya kita akan mulai memahami Pertukaran secara lebih detail.