RabbitMQ. 1-qism. Kirish. Erlang, AMQP

Xayrli kun, Xabr! Men to'plashga muvaffaq bo'lgan bilimlar bo'yicha darslik-ma'lumotnomani baham ko'rmoqchiman RabbitMQ va qisqacha tavsiyalar va xulosalarga jamlang.

Mundarija

  • RabbitMQ. 1-qism. Kirish. Erlang, AMQP va RPC
  • RabbitMQ. 2-qism. Birjalarni tushunish
  • RabbitMQ. 3-qism. Navbatlar va bog'lashlarni tushunish
  • RabbitMQ. 4-qism. Xabarlar va ramkalar nima ekanligini tushunish
  • RabbitMQ. 5-qism: Xabarni nashr qilish va iste'mol qilish
  • RabbitMQ. 6-qism. Federatsiya va belkurak modullarining umumiy ko'rinishi
  • RabbitMQ. 7-qism. Ulanish va Chanel haqida tafsilotlar
  • RabbitMQ. 8-qism. .NETda RabbitMQ
  • RabbitMQ. 9-qism. Monitoring

AMQP haqida qisqacha

AMQP (Advanced Message Queuing Protocol) - tizim komponentlari o'rtasida xabarlarni uzatish uchun ochiq protokol. Asosiy g'oya shundan iboratki, alohida quyi tizimlar (yoki mustaqil ilovalar) marshrutlashni amalga oshiradigan, ehtimol yetkazib berishni kafolatlaydigan, ma'lumotlar oqimini tarqatadigan va kerakli xabar turlariga obuna bo'lgan AMQP brokeri orqali o'zboshimchalik bilan xabar almashishi mumkin.

Protokol AMQP uchta tushunchani kiritadi:

RabbitMQ. 1-qism. Kirish. Erlang, AMQP

  • exchange (almashtirish punkti yoki almashinuvi) - unga xabarlar yuboriladi. Ayirboshlash nuqtasi xabarni tarqatadi bir yoki bir nechta navbatda. U xabarlarni navbatga yo'naltiradi yaratilgan havolalar asosida (binding) u bilan navbat o'rtasida
  • queue (navbat) - diskdagi yoki operativ xotiradagi ma'lumotlar strukturasi xabarlarga havolalarni saqlaydi va xabarlarning nusxalarini beradi consumers (iste'molchilarga)
  • binding (majburiy) - bu qoida almashinuv nuqtasiga ushbu xabarlar qaysi navbatga tushishi kerakligini aytadi

Protokol tepada ishlaydi TCP / IP.

Erlang haqida qisqacha

Loyihaning manba kodi quyidagi manzilda joylashgan GitHub. Arxitektura RabbitMQ-server asoslangan erlang va BEAM.

Erlang kompaniyasi tomonidan ishlab chiqilgan Ericsson 1980-yillarning o'rtalarida 99,999% ish vaqtini talab qiladigan ilovalar uchun taqsimlangan, nosozliklarga chidamli, real vaqtda tizim sifatida. Erlang turli sohalarda va zamonaviy ilovalarda qo'llaniladi, masalan. WhatsApp. Batafsil maqolada o'qishingiz mumkin Facebook 19 milliard dollarga sotib olgan WhatsApp arxitekturasi

RabbitMQ haqida qisqacha

Quyon MQ ochiq manbali xabarlar brokeridir. U xabarlarni protokolning barcha asosiy tamoyillari bo'yicha yo'naltiradi AMQP da tasvirlangan texnik xususiyatlar. RabbitMQ protokolni amalga oshiradi va to'ldiradi AMQP.

Xabar almashish modelining asosiy g'oyasi RabbitMQ narsa producer (nashriyotchi) xabarlarni to'g'ridan-to'g'ri navbatga yubormaydi. Haqiqatan ham, va ko'pincha, nashriyot xabarning biron bir navbatga yetkazilishini ham bilmaydi.

Buning o'rniga, nashriyot faqat birjaga xabar yuborishi mumkin. Bir tomondan, birja nashriyotlardan xabarlarni qabul qilsa, ikkinchi tomondan, ularni navbatga yuboradi. Birja o'zi olgan xabar bilan nima qilish kerakligini aniq bilishi kerak. Uni ma'lum bir navbatga qo'shish kerakmi? Uni bir nechta navbatga qo'shish kerakmi? Yoki xabarni e'tiborsiz qoldirish kerak.

RabbitMQ. 1-qism. Kirish. Erlang, AMQP

Qisqa ish RabbitMQ quyidagicha tavsiflash mumkin:

  1. Nashriyot ma'lum bir almashinuvga xabar yuboradi
  2. Birja xabarni qabul qilib, uni navbat bilan o'rtasidagi majburiy qoidalarga muvofiq bir yoki bir nechta navbatga yo'naltiradi.
  3. Navbat ushbu xabarga havolani saqlaydi. Xabarning o'zi RAMda yoki diskda saqlanadi
  4. Iste'molchi navbatdan xabar olishga tayyor bo'lgach, server havola orqali xabarning nusxasini yaratadi va jo'natadi.
  5. Iste'molchi xabarni oladi va brokerga tasdiqlashni yuboradi
  6. Broker, tasdiqlashni olgach, navbatdan xabarning nusxasini olib tashlaydi. Keyin RAM va diskdan o'chiriladi

CPR

jarayon RPC (masofali protsedura chaqiruvi) yadro bilan deyarli barcha o'zaro ta'sirlar asosida RabbitMQ. Masalan, mijozning shartlari haqida dastlabki muhokamalar RabbitMQ, ma'lum bir jarayonni ko'rsatadi RPC. Ushbu ketma-ketlik tugagach, RabbitMQ mijozning so'rovlarini qabul qilishga tayyor bo'ladi:

RabbitMQ. 1-qism. Kirish. Erlang, AMQP

Shuningdek, spetsifikatsiyada AMQP mijoz ham, server ham buyruq berishi mumkin. Bu shuni anglatadiki, mijoz server bilan muloqot qilishni kutmoqda. Buyruqlar sinflar va usullardir. Masalan, Connection.Start - usul chaqiruvi Start daraja Connection.

Ulanish va kanallar

Mijoz va server o'rtasida bunday ma'lumot almashish uchun, kanallar. Kanallar ichida yaratilgan maxsus ulanish. Har bir kanal boshqa kanallardan ajratilgan. Sinxron holatda javob olinmaguncha keyingi buyruqni bajarish mumkin emas.

Buyruqlarni parallel ravishda yuborish uchun siz bir nechta kanallarni ochishingiz kerak. Har bir kanal alohida kanal yaratadi Erlang jarayon. Bitta ulanishda bir nechta kanal bo'lishi mumkin (multiplekslash). Har bir kanal uchun xotirada ma'lum tuzilmalar va ob'ektlar mavjud. Shuning uchun, ulanish ichida qancha kanallar bo'lsa, shuncha ko'p RabbitMQ ko'proq xotiradan foydalanadi bunday aloqani boshqarish uchun.

RabbitMQ. 1-qism. Kirish. Erlang, AMQP

Foydalanish orqali ulanish va kanal yaratishning oddiy misoli 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 
}

Har bir operatsiya uchun yangi ulanishni ochish qat'iyan tavsiya etilmaydi katta xarajatlarga olib keladi. Kanallar ham doimiy bo'lishi kerak, lekin ko'plab protokol xatolar kanalning yopilishiga olib keladi, shuning uchun kanalning ishlash muddati ulanishga qaraganda qisqaroq bo'lishi mumkin.

RabbitMQ qayerda ishlatiladi?

Mikroservislar kontekstida protokol AMQP va uning joriy etilishi RabbitMQ uchun tez-tez ishlatiladi asinxron shovqin xizmatlar o'rtasida.

Kontekstda IIOT protokol AMQP va uning joriy etilishi RabbitMQ serverlar (server-server) o'rtasida ma'lumotlar almashinuvi uchun ishlatiladi. Shuningdek, plagindan foydalaning MQTT plagini RabbitMQ bu protokolning amalga oshirilishi hisoblanadi MQTT Sensor va server o'rtasida past tezlikda, yuqori kechikishli muhitlarda ma'lumotlarni uzatish uchun (qo'llab-quvvatlanadigan protokollarning to'liq ro'yxati quyida keltirilgan loyiha sayti).

Keyingi maqolada biz birjalarni batafsilroq tushunishni boshlaymiz.

Manbalar

Manba: www.habr.com

a Izoh qo'shish