RabbitMQ. 1-р хэсэг. Оршил. Эрланг, AMQP

Өдрийн мэнд, Хабр! Би өөрийнхөө цуглуулж чадсан сурах бичгийн лавлах номоо хуваалцахыг хүсч байна RabbitMQ мөн товч зөвлөмж, дүгнэлт болгон нэгтгэх.

Агуулга

  • RabbitMQ. 1-р хэсэг. Оршил. Erlang, AMQP болон RPC
  • RabbitMQ. 2-р хэсэг. Солилцооны тухай ойлголт
  • RabbitMQ. 3-р хэсэг. Дараалал ба холболтын тухай ойлголт
  • RabbitMQ. 4-р хэсэг. Мессеж, хүрээ гэж юу болохыг ойлгох
  • RabbitMQ. 5-р хэсэг: Зурвасыг хэвлэн нийтлэх, хэрэглэх
  • RabbitMQ. 6-р хэсэг. Холбооны болон хүрзний модулиудын тойм
  • RabbitMQ. 7-р хэсэг. Холболт ба Chanel-ийн талаарх дэлгэрэнгүй мэдээлэл
  • RabbitMQ. 8-р хэсэг. .NET дэх RabbitMQ
  • RabbitMQ. 9-р хэсэг. Хяналт

AMQP-ийн талаар товчхон

AMQP (Advanced Message Queuing Protocol) нь системийн бүрэлдэхүүн хэсгүүдийн хооронд мессеж дамжуулах нээлттэй протокол юм. Үндсэн санаа нь тусдаа дэд системүүд (эсвэл бие даасан програмууд) AMQP брокероор дамжуулан дур зоргоороо мессеж солилцох боломжтой бөгөөд энэ нь чиглүүлэлт хийж, магадгүй хүргэлтийг баталгаажуулж, өгөгдлийн урсгалыг түгээж, хүссэн мессежийн төрлүүдийг захиалж болно.

Протокол AMQP гурван ойлголтыг танилцуулж байна:

RabbitMQ. 1-р хэсэг. Оршил. Эрланг, AMQP

  • exchange (солилцооны цэг эсвэл солилцоо) - түүн рүү мессеж илгээгддэг. Солилцооны цэг мессежийг түгээдэг нэг буюу хэд хэдэн дараалалд. Тэр мессежийг дараалал руу чиглүүлдэг үүсгэсэн холбоос дээр үндэслэсэн (binding) түүнийг болон дарааллын хооронд
  • queue (дараалал) - диск эсвэл RAM дахь өгөгдлийн бүтэц мессежийн холбоосыг хадгалж, мессежийн хуулбарыг өгдөг consumers (хэрэглэгчдэд)
  • binding (заавал биелүүлэх) - дүрэм солилцох цэгт эдгээр мессежийг аль дараалалд оруулахыг зааж өгнө

Протокол нь дээд талд ажилладаг TCP / IP.

Эрлангийн тухай товчхон

Төслийн эх код нь хаягийн санд байна GitHub. Архитектур RabbitMQ сервер дээр суурилсан Эрланг болон BEAM.

Erlang компани боловсруулсан Ericsson 1980-аад оны дундуур 99,999% ажиллах хугацаа шаардсан программуудад зориулагдсан тархсан, гэмтэлд тэсвэртэй, бодит цагийн систем болгон. Erlang янз бүрийн үйлдвэрүүд болон орчин үеийн хэрэглээнд ашигладаг, жишээлбэл. WhatsApp. Та нийтлэлээс илүү ихийг уншиж болно Facebook-ийн 19 тэрбум доллараар худалдаж авсан WhatsApp архитектур

RabbitMQ-ийн талаар товчхон

Rabbit MQ нь нээлттэй эхийн мессеж брокер юм. Энэ нь протоколын бүх үндсэн зарчмуудын дагуу мессежийг чиглүүлдэг AMQP -д тодорхойлсон техникийн үзүүлэлтүүд. RabbitMQ протоколыг хэрэгжүүлж, нэмэлт AMQP.

Мессежийн загварын гол санаа RabbitMQ зүйл юм producer (хэвлэн нийтлэгч) дараалал руу шууд мессеж илгээдэггүй. Үнэн хэрэгтээ, ихэвчлэн нийтлэгч нь мессежийг ямар ч дараалалд хүргэх эсэхийг мэддэггүй.

Үүний оронд нийтлэгч зөвхөн бирж рүү мессеж илгээх боломжтой. Нэг талаас, бирж нь нийтлэгчдээс мессеж хүлээн авч, нөгөө талаас тэднийг дараалалд илгээдэг. Бирж нь хүлээн авсан мессежийг яг юу хийхээ мэддэг байх ёстой. Үүнийг тодорхой дараалалд нэмэх ёстой юу? Үүнийг олон дараалалд нэмэх ёстой юу? Эсвэл мессежийг үл тоомсорлож болохгүй.

RabbitMQ. 1-р хэсэг. Оршил. Эрланг, AMQP

Богино ажил RabbitMQ дараах байдлаар тодорхойлж болно.

  1. Нийтлэгч нь тодорхой бирж рүү мессеж илгээдэг
  2. Бирж нь мессеж хүлээн авсны дараа түүнийг дарааллын хооронд заавал дагаж мөрдөх дүрмийн дагуу нэг буюу хэд хэдэн дараалал руу чиглүүлдэг.
  3. Дараалал нь энэ мессежийн лавлагааг хадгалдаг. Зурвас нь өөрөө RAM эсвэл дискэнд хадгалагддаг
  4. Хэрэглэгч дарааллаас мессеж хүлээн авахад бэлэн болмогц сервер холбоосоор дамжуулан мессежийн хуулбарыг үүсгэж, илгээдэг.
  5. Хэрэглэгч мессеж хүлээн авч, баталгаажуулалтыг брокер руу илгээдэг
  6. Брокер баталгаажуулалтыг хүлээн авсны дараа мессежийн хуулбарыг дарааллаас устгана. Дараа нь RAM болон дискнээс устгана

CPR

үйл явц RPC (алсын процедурын дуудлага) цөмтэй бараг бүх харилцан үйлчлэлийн үндэс суурь болдог RabbitMQ. Жишээлбэл, үйлчлүүлэгчийн нөхцлийн талаархи анхны хэлэлцүүлэг RabbitMQ, тодорхой үйл явцыг харуулдаг RPC. Энэ дараалал дууссаны дараа, RabbitMQ үйлчлүүлэгчийн хүсэлтийг хүлээн авахад бэлэн байх болно:

RabbitMQ. 1-р хэсэг. Оршил. Эрланг, AMQP

Мөн тодорхойлолтод AMQP Үйлчлүүлэгч болон сервер хоёулаа тушаал өгөх боломжтой. Энэ нь үйлчлүүлэгч сервертэй холбогдохыг хүлээж байна гэсэн үг юм. Тушаалууд нь анги, аргууд юм. Жишээлбэл, Connection.Start – аргын дуудлага Start анги Connection.

Холболт ба сувгууд

Үйлчлүүлэгч болон серверийн хооронд ийм мэдээлэл солилцохын тулд, сувгууд. Сувгууд нь дотроо үүсгэгддэг тодорхой холболт. Суваг бүр нь бусад сувгуудаас тусгаарлагдсан байдаг. Синхрон тохиолдолд хариу ирэх хүртэл дараагийн командыг гүйцэтгэх боломжгүй.

Зэрэгцээ тушаал илгээхийн тулд та хэд хэдэн суваг нээх хэрэгтэй. Суваг бүр тусдаа суваг үүсгэдэг Erlang үйл явц. Нэг холболт нь олон сувагтай байж болно (олон талт). Суваг бүрийн хувьд санах ойд тодорхой бүтэц, объектууд байдаг. Тиймээс холболт дотор олон суваг байх тусам RabbitMQ илүү их санах ой ашигладаг ийм холболтыг удирдах.

RabbitMQ. 1-р хэсэг. Оршил. Эрланг, AMQP

Холболт, суваг үүсгэх энгийн жишээ 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 
}

Үйл ажиллагаа бүрт шинэ холболт нээхийг хатуу хориглоно өндөр зардал гаргахад хүргэнэ. Сувгууд нь мөн тогтвортой байх ёстой, гэхдээ олон протоколын алдаа нь сувгийг хаахад хүргэдэг тул сувгийн ашиглалтын хугацаа холболтын хугацаанаас богино байж болно.

RabbitMQ хаана ашиглагддаг вэ?

Микро үйлчилгээний хүрээнд протокол AMQP болон түүний хэрэгжилт RabbitMQ ихэвчлэн ашигладаг асинхрон харилцан үйлчлэл үйлчилгээний хооронд.

Агуулгын хувьд IIOT протокол AMQP болон түүний хэрэгжилт RabbitMQ серверүүд (сервер-сервер) хооронд өгөгдөл солилцоход ашигладаг. Мөн залгаасыг ашиглана уу MQTT залгаас RabbitMQ протоколын хэрэгжилт юм MQTT Мэдрэгч болон серверийн хооронд бага хурдтай, өндөр хоцролттой орчинд өгөгдөл дамжуулахад зориулагдсан (дэмжигдсэн протоколуудын бүрэн жагсаалтыг энд жагсаасан болно. төслийн вэбсайт).

Дараагийн өгүүллээр бид Биржийг илүү нарийвчлан ойлгож эхлэх болно.

лавлагаа

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх