RabbitMQ. Қисми 1. Муқаддима. Эрланг, AMQP

Субҳ ба хайр, Ҳабр! Ман мехоҳам як китоби дарсӣ-маълумотномаеро мубодила кунам, ки ман тавонистам онро ҷамъ кунам RabbitMQ ва ба тавсияҳо ва хулосаҳои кӯтоҳ ҷамъбаст кунед.

Мундариҷа

  • RabbitMQ. Қисми 1. Муқаддима. Erlang, AMQP ва RPC
  • RabbitMQ. Қисми 2. Фаҳмидани мубодила
  • RabbitMQ. Қисми 3. Фаҳмидани навбатҳо ва бастаҳо
  • RabbitMQ. Қисми 4. Фаҳмидани паёмҳо ва чаҳорчӯбаҳо
  • RabbitMQ. Қисми 5: Нашри паём ва иҷрои истеъмол
  • RabbitMQ. Қисми 6. Баррасии модулҳои Федератсия ва бел
  • RabbitMQ. Қисми 7. Тафсилот дар бораи Пайвастшавӣ ва Chanel
  • RabbitMQ. Қисми 8. RabbitMQ дар .NET
  • 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. Шумо метавонед бештар дар мақола хонед Меъмории WhatsApp, ки Facebook онро ба маблағи 19 миллиард доллар харидааст

Мухтасар дар бораи RabbitMQ

Харгӯш брокери паёми кушодаасос аст. Он паёмҳоро дар асоси тамоми принсипҳои асосии протокол равона мекунад 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 барои интиқоли маълумот байни сенсор ва сервер дар муҳитҳои пастсуръат ва таъхири баланд (рӯйхати пурраи протоколҳои дастгирӣ дар ин рӯйхат оварда шудааст. сомона).

Дар мақолаи навбатӣ мо ба тафсилоти бештари мубодилаи асъор сар мекунем.

мурожиат

Манбаъ: will.com

Илова Эзоҳ