RabbitMQ. 1-бөлім. Кіріспе. Эрланг, AMQP

Қайырлы күн, Хабр! Мен жинақтап алған білімімнің оқулық-анықтамалығымен бөліскім келеді RabbitMQ және қысқаша ұсыныстар мен қорытындыларға жинақтау.

Мазмұны

  • RabbitMQ. 1-бөлім. Кіріспе. Erlang, AMQP және RPC
  • RabbitMQ. 2-бөлім. Биржаларды түсіну
  • RabbitMQ. 3-бөлім. Кезек пен байланыстыруды түсіну
  • RabbitMQ. 4-бөлім. Хабарлар мен фреймдердің не екенін түсіну
  • RabbitMQ. 5-бөлім: Жариялау және хабарлама өнімділігін тұтыну
  • RabbitMQ. 6-бөлім. Федерация және күрек модульдеріне шолу
  • RabbitMQ. 7-бөлім. Connection және Chanel туралы мәліметтер
  • RabbitMQ. 8-бөлім. .NET жүйесіндегі RabbitMQ
  • RabbitMQ. 9-бөлім. Мониторинг

AMQP туралы қысқаша

AMQP (Advanced Message Queuing Protocol) – жүйе құрамдас бөліктері арасында хабарламаларды жіберуге арналған ашық хаттама. Негізгі идея жеке ішкі жүйелер (немесе тәуелсіз қолданбалар) маршруттауды орындайтын, жеткізуге кепілдік беретін, деректер ағындарын тарататын және қажетті хабар түрлеріне жазылатын AMQP брокері арқылы еркін түрде хабарламалармен алмаса алады.

Хаттама AMQP үш ұғымды енгізеді:

RabbitMQ. 1-бөлім. Кіріспе. Эрланг, AMQP

  • exchange (айырбастау пункті немесе алмасу) - оған хабарламалар жіберіледі. Айырбастау нүктесі хабарлама таратады бір немесе бірнеше кезекте. Ол хабарламаларды кезекке бағыттайды құрылған сілтемелер негізінде (binding) оны мен кезек арасында
  • queue (кезек) – дискідегі немесе жедел жадтағы деректер құрылымы хабарларға сілтемелерді сақтайды және хабарламалардың көшірмелерін береді consumers (тұтынушыларға)
  • binding (міндетті) – бұл ереже алмасу нүктесіне бұл хабарлардың қай кезекке тұруы керектігін айтады

Протокол жоғарыда орындалады TCP / IP.

Ерлан туралы қысқаша

Жобаның бастапқы коды мына мекенжайдағы репозиторийде GitHub. Архитектура RabbitMQ-сервер негізделген Ерлан және BEAM.

Erlang компаниясы әзірлеген Ericsson 1980 жылдардың ортасында 99,999% жұмыс уақытын қажет ететін қолданбаларға бөлінген, қатеге төзімді, нақты уақыттағы жүйе ретінде. Erlang әртүрлі салаларда және заманауи қолданбаларда қолданылады, мысалы. WhatsApp. Толығырақ мақалада оқи аласыз Facebook 19 миллиард долларға сатып алған WhatsApp архитектурасы

RabbitMQ туралы қысқаша

Қоян MQ ашық бастапқы хабар брокері болып табылады. Ол хаттаманың барлық негізгі принциптері бойынша хабарламаларды бағыттайды AMQP сипатталған сипаттамалары. RabbitMQ хаттаманы жүзеге асырады және толықтырады AMQP.

Хабар алмасу моделінің негізгі идеясы RabbitMQ нәрсе producer (баспагер) хабарламаларды тікелей кезекке жібермейді. Шын мәнінде, және жиі, баспагер хабарламаның кез келген кезекке жеткізілетінін білмейді.

Оның орнына, баспагер тек алмасуға хабарламалар жібере алады. Бір жағынан, биржа баспалардан хабарламалар алса, екінші жағынан оларды кезекке жібереді. Биржа алған хабарламамен не істеу керектігін нақты білуі керек. Оны белгілі бір кезекке қосу керек пе? Оны бірнеше кезекке қосу керек пе? Немесе хабарды елемеу керек.

RabbitMQ. 1-бөлім. Кіріспе. Эрланг, AMQP

Қысқаша жұмыс RabbitMQ келесідей сипаттауға болады:

  1. Баспагер белгілі бір алмасуға хабарлама жібереді
  2. Алмасу хабарламаны алғаннан кейін оны және кезек арасындағы міндетті ережелерге сәйкес оны бір немесе бірнеше кезекке бағыттайды.
  3. Кезек осы хабарға сілтемені сақтайды. Хабарламаның өзі жедел жадта немесе дискіде сақталады
  4. Тұтынушы кезектен хабар алуға дайын болғаннан кейін сервер сілтеме арқылы хабарламаның көшірмесін жасайды және жібереді.
  5. Тұтынушы хабарламаны алады және брокерге растауды жібереді
  6. Брокер растауды алғаннан кейін хабарламаның көшірмесін кезектен алып тастайды. Содан кейін ол RAM және дискіден жойылады

RPC

процесс 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 төмен жылдамдықты, кідірісі жоғары орталарда сенсор мен сервер арасында деректерді беру үшін (қолдау көрсетілетін протоколдардың толық тізімі мына жерде берілген: жобаның сайты).

Келесі мақалада біз Exchange туралы толығырақ түсінуге кірісеміз.

сілтемелер

Ақпарат көзі: www.habr.com

пікір қалдыру