РаббитМК. Део 1. Увод. Ерланг, АМКП

Добар дан, Хабр! Желим да поделим уџбеник-приручник знања које сам успео да прикупим RabbitMQ и сажети у кратке препоруке и закључке.

Преглед садржаја

  • РаббитМК. Део 1. Увод. Ерланг, АМКП и РПЦ
  • РаббитМК. Део 2. Разумевање размене
  • РаббитМК. Део 3. Разумевање редова и везивања
  • РаббитМК. Део 4. Разумевање шта су поруке и оквири
  • РаббитМК. Део 5: Перформансе објављивања и конзумирања порука
  • РаббитМК. Део 6. Преглед модула Федерације и Лопате
  • РаббитМК. Део 7. Детаљи о Цоннецтион и Цханел
  • РаббитМК. Део 8. РаббитМК у .НЕТ-у
  • РаббитМК. Део 9. Мониторинг

Укратко о АМКП-у

АМКП (Адванцед Мессаге Куеуинг Протоцол) је отворени протокол за пренос порука између компоненти система. Основна идеја је да појединачни подсистеми (или независне апликације) могу да размењују поруке на произвољан начин преко АМКП брокера, који врши рутирање, евентуално гарантује испоруку, дистрибуира токове података и претплаћује се на жељене типове порука.

Протокол AMQP уводи три концепта:

РаббитМК. Део 1. Увод. Ерланг, АМКП

  • exchange (тачка размене или размене) - поруке се шаљу на њега. Тачка размене дистрибуира поруку у једном или више редова. Она усмерава поруке у ред на основу креираних веза (binding) између њега и реда
  • queue (ред) - структура података на диску или у РАМ меморији која чува везе до порука и даје копије порука consumers (потрошацима)
  • binding (везивање) – правило које говори тачки размене у који ред треба да иду ове поруке

Протокол ради на врху ТЦП / ИП.

Укратко о Ерлангу

Изворни код пројекта је у спремишту на ГитХуб. Архитектура РаббитМК-сервер На основу Ерланг анд БЕАМ.

Erlang развила компанија Ericsson средином 1980-их као дистрибуирани систем у реалном времену отпоран на грешке за апликације које захтевају 99,999% непрекидног рада. Erlang користи се у разним индустријама и савременим применама, нпр. WhatsApp. Више можете прочитати у чланку Архитектура ВхатсАпп-а, коју је Фејсбук купио за 19 милијарди долара

Укратко о РаббитМК-у

РаббитМК је посредник порука отвореног кода. Он усмерава поруке дуж свих основних принципа протокола АМКП описано у спецификације. RabbitMQ спроводи и допуњује протокол AMQP.

Главна идеја модела за размену порука у RabbitMQ ствар је у томе producer (издавач) не шаље поруке директно у ред чекања. У ствари, и прилично често, издавач чак и не зна да ли ће порука уопште бити испоручена у било који ред.

Уместо тога, издавач може само да шаље поруке размени. С једне стране, размена прима поруке од издавача, а са друге их шаље у редове. Размена мора тачно да зна шта да ради са поруком коју прими. Да ли га треба додати у одређени ред? Да ли га треба додати у више редова? Или поруку треба занемарити.

РаббитМК. Део 1. Увод. Ерланг, АМКП

Кратак рад RabbitMQ може се описати на следећи начин:

  1. Издавач шаље поруку одређеној размени
  2. Размена, након што је примила поруку, усмерава је у један или више редова у складу са правилима везивања између ње и реда
  3. Ред чува референцу на ову поруку. Сама порука се чува у РАМ-у или на диску
  4. Када је потрошач спреман да прими поруку из реда, сервер креира копију поруке преко везе и шаље
  5. Потрошач прима поруку и шаље потврду брокеру
  6. Брокер, по пријему потврде, уклања копију поруке из реда. Затим брише из РАМ-а и диска

РПЦ

процес РПЦ (позив удаљене процедуре) лежи у основи скоро свих интеракција са језгром RabbitMQ. На пример, почетне дискусије о условима клијента са RabbitMQ, показује одређени процес RPC. Када се овај низ заврши, RabbitMQ биће спреман да прихвати захтеве клијента:

РаббитМК. Део 1. Увод. Ерланг, АМКП

Такође у спецификацији AMQP и клијент и сервер могу да издају команде. То значи да клијент чека да комуницира са сервером. Команде су класе и методе. На пример, Connection.Start – позив методе Start класа Connection.

Веза и канали

За такву размену информација између клијента и сервера, канала. Канали се креирају унутар специфична веза. Сваки канал је изолован од осталих канала. У синхроном случају, није могуће извршити следећу команду док се не прими одговор.

Да бисте могли да шаљете команде паралелно, морате отворити неколико канала. Сваки канал ствара засебан Erlang процес. Једна веза може имати више канала (мултиплексирање). За сваки канал постоје одређене структуре и објекти у меморији. Дакле, што више канала постоји унутар везе, то РаббитМК користи више меморије да управља таквом везом.

РаббитМК. Део 1. Увод. Ерланг, АМКП

Једноставан пример креирања везе и коришћења канала РаббитМК.Цлиент:

// ...
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 
}

Због тога се не препоручује отварање нове везе за сваку операцију довешће до високих трошкова. Канали такође треба да буду упорни, али многе грешке у протоколу доводе до затварања канала, тако да животни век канала може бити краћи од животног века везе.

Где се користи РаббитМК?

У контексту микросервиса, протокол AMQP и његову имплементацију у RabbitMQ често се користи за асинхрона интеракција између служби.

У контексту IIOT protokola AMQP и његову имплементацију у RabbitMQ користи се за размену података између сервера (сервер-сервер). Такође користите додатак МКТТ додатак РаббитМК што је имплементација протокола МКТТ за пренос података између сензора и сервера у окружењима мале брзине и велике латенције (пуна листа подржаних протокола је наведена на сајт пројекта).

У следећем чланку ћемо почети да разумемо размене детаљније.

референце

Извор: ввв.хабр.цом

Додај коментар