Өдрийн мэнд, Хабр! Би өөрийнхөө цуглуулж чадсан сурах бичгийн лавлах номоо хуваалцахыг хүсч байна 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
гурван ойлголтыг танилцуулж байна:
exchange
(солилцооны цэг эсвэл солилцоо) - түүн рүү мессеж илгээгддэг. Солилцооны цэг мессежийг түгээдэг нэг буюу хэд хэдэн дараалалд. Тэр мессежийг дараалал руу чиглүүлдэг үүсгэсэн холбоос дээр үндэслэсэн (binding
) түүнийг болон дарааллын хоорондqueue
(дараалал) - диск эсвэл RAM дахь өгөгдлийн бүтэц мессежийн холбоосыг хадгалж, мессежийн хуулбарыг өгдөгconsumers
(хэрэглэгчдэд)binding
(заавал биелүүлэх) - дүрэм солилцох цэгт эдгээр мессежийг аль дараалалд оруулахыг зааж өгнө
Протокол нь дээд талд ажилладаг
Эрлангийн тухай товчхон
Төслийн эх код нь хаягийн санд байна
Erlang
компани боловсруулсанEricsson
1980-аад оны дундуур 99,999% ажиллах хугацаа шаардсан программуудад зориулагдсан тархсан, гэмтэлд тэсвэртэй, бодит цагийн систем болгон.Erlang
янз бүрийн үйлдвэрүүд болон орчин үеийн хэрэглээнд ашигладаг, жишээлбэл.Facebook-ийн 19 тэрбум доллараар худалдаж авсан WhatsApp архитектур
RabbitMQ-ийн талаар товчхон
RabbitMQ
протоколыг хэрэгжүүлж, нэмэлт AMQP
.
Мессежийн загварын гол санаа RabbitMQ
зүйл юм producer
(хэвлэн нийтлэгч) дараалал руу шууд мессеж илгээдэггүй. Үнэн хэрэгтээ, ихэвчлэн нийтлэгч нь мессежийг ямар ч дараалалд хүргэх эсэхийг мэддэггүй.
Үүний оронд нийтлэгч зөвхөн бирж рүү мессеж илгээх боломжтой. Нэг талаас, бирж нь нийтлэгчдээс мессеж хүлээн авч, нөгөө талаас тэднийг дараалалд илгээдэг. Бирж нь хүлээн авсан мессежийг яг юу хийхээ мэддэг байх ёстой. Үүнийг тодорхой дараалалд нэмэх ёстой юу? Үүнийг олон дараалалд нэмэх ёстой юу? Эсвэл мессежийг үл тоомсорлож болохгүй.
Богино ажил RabbitMQ
дараах байдлаар тодорхойлж болно.
- Нийтлэгч нь тодорхой бирж рүү мессеж илгээдэг
- Бирж нь мессеж хүлээн авсны дараа түүнийг дарааллын хооронд заавал дагаж мөрдөх дүрмийн дагуу нэг буюу хэд хэдэн дараалал руу чиглүүлдэг.
- Дараалал нь энэ мессежийн лавлагааг хадгалдаг. Зурвас нь өөрөө RAM эсвэл дискэнд хадгалагддаг
- Хэрэглэгч дарааллаас мессеж хүлээн авахад бэлэн болмогц сервер холбоосоор дамжуулан мессежийн хуулбарыг үүсгэж, илгээдэг.
- Хэрэглэгч мессеж хүлээн авч, баталгаажуулалтыг брокер руу илгээдэг
- Брокер баталгаажуулалтыг хүлээн авсны дараа мессежийн хуулбарыг дарааллаас устгана. Дараа нь RAM болон дискнээс устгана
CPR
үйл явц RabbitMQ
. Жишээлбэл, үйлчлүүлэгчийн нөхцлийн талаархи анхны хэлэлцүүлэг RabbitMQ
, тодорхой үйл явцыг харуулдаг RPC
. Энэ дараалал дууссаны дараа, RabbitMQ
үйлчлүүлэгчийн хүсэлтийг хүлээн авахад бэлэн байх болно:
Мөн тодорхойлолтод AMQP
Үйлчлүүлэгч болон сервер хоёулаа тушаал өгөх боломжтой. Энэ нь үйлчлүүлэгч сервертэй холбогдохыг хүлээж байна гэсэн үг юм. Тушаалууд нь анги, аргууд юм. Жишээлбэл, Connection.Start
– аргын дуудлага Start
анги Connection
.
Холболт ба сувгууд
Үйлчлүүлэгч болон серверийн хооронд ийм мэдээлэл солилцохын тулд, сувгууд. Сувгууд нь дотроо үүсгэгддэг тодорхой холболт. Суваг бүр нь бусад сувгуудаас тусгаарлагдсан байдаг. Синхрон тохиолдолд хариу ирэх хүртэл дараагийн командыг гүйцэтгэх боломжгүй.
Зэрэгцээ тушаал илгээхийн тулд та хэд хэдэн суваг нээх хэрэгтэй. Суваг бүр тусдаа суваг үүсгэдэг Erlang
үйл явц. Нэг холболт нь олон сувагтай байж болно (
Холболт, суваг үүсгэх энгийн жишээ
// ...
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
серверүүд (сервер-сервер) хооронд өгөгдөл солилцоход ашигладаг. Мөн залгаасыг ашиглана уу
Дараагийн өгүүллээр бид Биржийг илүү нарийвчлан ойлгож эхлэх болно.
лавлагаа
Эх сурвалж: www.habr.com