RabbitMQ. Bahagian 1. Pengenalan. Erlang, AMQP

Selamat petang, Habr! Saya ingin berkongsi buku rujukan buku ilmu yang berjaya saya kumpulkan RabbitMQ dan ringkaskan kepada cadangan dan kesimpulan ringkas.

jadual kandungan

  • RabbitMQ. Bahagian 1. Pengenalan. Erlang, AMQP dan RPC
  • RabbitMQ. Bahagian 2. Memahami Pertukaran
  • RabbitMQ. Bahagian 3. Memahami Baris Gilir dan Ikatan
  • RabbitMQ. Bahagian 4. Memahami apa itu mesej dan bingkai
  • RabbitMQ. Bahagian 5: Penerbitan Mesej dan Prestasi Penggunaan
  • RabbitMQ. Bahagian 6. Kajian semula modul Persekutuan dan Shovel
  • RabbitMQ. Bahagian 7. Butiran tentang Sambungan dan Chanel
  • RabbitMQ. Bahagian 8. RabbitMQ dalam .NET
  • RabbitMQ. Bahagian 9. Pemantauan

Secara ringkas tentang AMQP

AMQP (Advanced Message Qeuing Protocol) ialah protokol terbuka untuk menghantar mesej antara komponen sistem. Idea asas ialah subsistem individu (atau aplikasi bebas) boleh bertukar-tukar mesej secara sewenang-wenangnya melalui broker AMQP, yang melakukan penghalaan, mungkin menjamin penghantaran, mengedarkan aliran data dan melanggan jenis mesej yang dikehendaki.

Protokol AMQP memperkenalkan tiga konsep:

RabbitMQ. Bahagian 1. Pengenalan. Erlang, AMQP

  • exchange (tempat pertukaran atau pertukaran) - mesej dihantar kepadanya. Titik pertukaran mengedarkan mesej dalam satu atau lebih baris gilir. dia mengarahkan mesej ke baris gilir berdasarkan sambungan yang dibuat (binding) antara dia dan barisan
  • queue (baris gilir) - struktur data pada cakera atau dalam RAM yang menyimpan pautan kepada mesej dan memberikan salinan mesej consumers (kepada pengguna)
  • binding (mengikat) - peraturan yang memberitahu titik pertukaran yang mana baris gilir mesej ini harus dimasukkan

Protokol berjalan di atas TCP / IP.

Secara ringkas tentang Erlang

Kod sumber projek berada dalam repositori di GitHub. Seni bina Pelayan RabbitMQ berdasarkan erlang dan BEAM.

Erlang dibangunkan oleh syarikat Ericsson pada pertengahan 1980-an sebagai sistem masa nyata yang diedarkan, tahan terhadap kesalahan, untuk aplikasi yang memerlukan 99,999% masa beroperasi. Erlang digunakan dalam pelbagai industri dan aplikasi moden, cth. WhatsApp. Anda boleh membaca lebih lanjut dalam artikel Seni bina WhatsApp, yang dibeli Facebook dengan harga $19 bilion

Secara ringkas tentang RabbitMQ

RabbitMQ ialah broker mesej sumber terbuka. Ia mengarahkan mesej sepanjang semua prinsip asas protokol AMQP diterangkan dalam spesifikasi. RabbitMQ melaksanakan dan menambah protokol AMQP.

Idea utama model pemesejan dalam RabbitMQ perkara adalah producer (penerbit) tidak menghantar mesej terus ke baris gilir. Malah, dan selalunya, penerbit tidak tahu sama ada mesej itu akan dihantar ke mana-mana baris gilir sama sekali.

Sebaliknya, penerbit hanya boleh menghantar mesej kepada bursa. Di satu pihak, pertukaran menerima mesej daripada penerbit, dan sebaliknya, ia menghantarnya ke baris gilir. Pertukaran mesti tahu dengan tepat apa yang perlu dilakukan dengan mesej yang diterima. Perlukah ia ditambahkan pada baris gilir tertentu? Perlukah ia ditambahkan pada berbilang baris gilir? Atau mesej itu harus diabaikan.

RabbitMQ. Bahagian 1. Pengenalan. Erlang, AMQP

Kerja ringkas RabbitMQ boleh digambarkan seperti berikut:

  1. Penerbit menghantar mesej kepada pertukaran tertentu
  2. Pertukaran, setelah menerima mesej, mengarahkannya ke satu atau lebih baris gilir mengikut peraturan yang mengikat antaranya dan baris gilir
  3. Baris gilir menyimpan rujukan kepada mesej ini. Mesej itu sendiri disimpan dalam RAM atau pada cakera
  4. Setelah pengguna bersedia untuk menerima mesej daripada baris gilir, pelayan mencipta salinan mesej melalui pautan dan menghantar
  5. Pengguna menerima mesej dan menghantar pengesahan kepada broker
  6. Broker, setelah menerima pengesahan, mengeluarkan salinan mesej daripada baris gilir. Kemudian padam dari RAM dan cakera

RPC

proses RPC (panggilan prosedur jauh) mendasari hampir semua interaksi dengan nukleus RabbitMQ. Contohnya, perbincangan awal tentang syarat pelanggan dengan RabbitMQ, menunjukkan proses tertentu RPC. Setelah urutan ini selesai, RabbitMQ akan bersedia untuk menerima permintaan daripada pelanggan:

RabbitMQ. Bahagian 1. Pengenalan. Erlang, AMQP

Juga dalam spesifikasi AMQP kedua-dua pelanggan dan pelayan boleh mengeluarkan arahan. Ini bermakna pelanggan sedang menunggu untuk berkomunikasi dengan pelayan. Perintah adalah kelas dan kaedah. Sebagai contoh, Connection.Start – panggilan kaedah Start kelas Connection.

Sambungan dan saluran

Untuk pertukaran maklumat sedemikian antara pelanggan dan pelayan, saluran. Saluran dibuat dalam sambungan tertentu. Setiap saluran diasingkan daripada saluran lain. Dalam kes segerak, tidak mungkin untuk melaksanakan arahan seterusnya sehingga respons diterima.

Untuk dapat menghantar arahan secara selari, anda perlu membuka beberapa saluran. Setiap saluran mencipta saluran yang berasingan Erlang proses. Satu sambungan boleh mempunyai berbilang saluran (pemultipleksan). Untuk setiap saluran terdapat struktur dan objek tertentu dalam ingatan. Oleh itu, semakin banyak saluran yang terdapat dalam satu sambungan, semakin banyak saluran RabbitMQ menggunakan lebih banyak memori untuk menguruskan sambungan sedemikian.

RabbitMQ. Bahagian 1. Pengenalan. Erlang, AMQP

Contoh mudah untuk membuat sambungan dan menggunakan saluran RabbitMQ.Pelanggan:

// ...
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 sambungan baharu untuk setiap operasi adalah sangat tidak digalakkan kerana ini akan menyebabkan kos yang tinggi. Saluran juga harus berterusan, tetapi banyak ralat protokol menyebabkan saluran ditutup, jadi jangka hayat saluran mungkin lebih pendek daripada sambungan.

Di manakah RabbitMQ digunakan?

Dalam konteks perkhidmatan mikro, protokol AMQP dan pelaksanaannya dalam RabbitMQ sering digunakan untuk interaksi tak segerak antara perkhidmatan.

Dalam konteks IIOT protokol AMQP dan pelaksanaannya dalam RabbitMQ digunakan untuk pertukaran data antara pelayan (server-server). Juga gunakan pemalam Pemalam MQTT RabbitMQ yang merupakan pelaksanaan protokol MQTT untuk menghantar data antara penderia dan pelayan dalam persekitaran berkelajuan rendah dan kependaman tinggi (senarai penuh protokol yang disokong disenaraikan di laman web projek).

Dalam artikel seterusnya kita akan mula memahami Pertukaran dengan lebih terperinci.

rujukan

Sumber: www.habr.com

Tambah komen