KelinciMQ. Bagian 1. Pendahuluan. Erlang, AMQP

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:

KelinciMQ. Bagian 1. Pendahuluan. Erlang, AMQP

  • 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

Protokol berjalan di atas TCP / IP.

Secara singkat tentang Erlang

Kode sumber proyek ada di repositori di GitHub. Arsitektur Server RabbitMQ berdasarkan erlang dan BALOK.

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.

KelinciMQ. Bagian 1. Pendahuluan. Erlang, AMQP

Pekerjaan singkat RabbitMQ dapat digambarkan sebagai berikut:

  1. Penerbit mengirimkan pesan ke bursa tertentu
  2. Pertukaran, setelah menerima pesan, mengarahkannya ke satu atau lebih antrian sesuai dengan aturan yang mengikat antara pesan tersebut dan antrian
  3. Antrian menyimpan referensi ke pesan ini. Pesan itu sendiri disimpan di RAM atau di disk
  4. Setelah konsumen siap menerima pesan dari antrian, server membuat salinan pesan melalui tautan dan mengirimkannya
  5. Konsumen menerima pesan dan mengirimkan konfirmasi kepada broker
  6. 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:

KelinciMQ. Bagian 1. Pendahuluan. Erlang, AMQP

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.

KelinciMQ. Bagian 1. Pendahuluan. Erlang, AMQP

Contoh sederhana membuat koneksi dan saluran menggunakan RabbitMQ.Klien:

// ...
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 
}

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.

referensi

Sumber: www.habr.com

Tambah komentar