Включите исполнение JavaScript в браузере, чтобы запустить приложение.
16 окт 2024

RabbitMQ: что это такое и зачем нужен

В статье мы подробно поговорим о RabbitMQ. Как работает данный брокер сообщений, где и для чего он применяется? В чем разница между Apache Kafka и RabbitMQ? Об этом и многом другом читайте на сайте.
  1. Что такое RabbitMQ
  2. Как работает RabbitMQ
  3. Где и зачем нужен RabbitMQ
  4. Разница между Apache Kafka и RabbitMQ
  5. Заключение

В этой статье мы обсудим инструмент, который обеспечивает коммуникацию между элементами в системах. RabbitMQ: что это, как работает и где пригодится.

Что такое RabbitMQ

RabbitMQ — это легковесный брокер сообщений с открытым исходным кодом, который применяется для обмена сообщениями между различными элементами системы.

Брокер — это посредник, который доставляет данные от продюсера получателю, управляет очередью, осуществляет маршрутизацию и хранение данных.

Такие посредники используются в различных архитектурах программного обеспечения, особенно в микросервисных, так как в них важна независимая работа компонентов.

Как работает RabbitMQ

Для понимания схемы работы нужно разобраться с основными компонентами брокера:

  • Queue — очередь. Структура данных, в которой сообщения находятся до того момента, пока получатель не будет готов их принять. Отсюда же будет осуществляться отправка копии данных получателю.
  • Exchange — обменник. Компонент, который осуществляет маршрутизацию, то есть распределение данных по очередям на основе binding.
  • Binding — привязка, связи. Набор правил, который указывает обменнику, в какую очередь должны попадать сообщения. Допускается, что привязок может быть несколько и с разными правилами.
  • Message — сообщение. Единица данных, которую нужно передать от продюсера получателю. Это может быть текст, JSON-, XML-файлы, бинарные данные и другие форматы.
  • Producer — продюсер. Сервис, который отправляет данные брокеру.
  • Consumer — получатель. Сервис, который получает и обрабатывает данные.

Описание работы инструмента:

  1. Продюсер генерирует данные и отправляет их в обменник.
  2. Обменник определяет данные в нужную очередь по правилам маршрутизации, установленным в binding.
  3. Данные из очереди копируются и направляются получателю, когда он готов принять сообщение.
  4. После получения и обработки данных получатель направляет брокеру ACK — acknowledgement, или подтверждение;
  5. Данные удаляются из очереди после получения ACK.

Пример работы программы: существует некий онлайн-кинотеатр, где пользователь может включить уведомления о новых сериях любимого сериала. Тогда в момент события — выхода новой серии — онлайн-кинотеатр отправляет сообщение, в котором содержится информация о событии и список получателей, в обменник, а затем — в нужную очередь. Потом эти данные направляются получателю, который их обрабатывает и посылает ACK.

Где и зачем нужен RabbitMQ

В целом, RabbitMQ используется тогда, когда необходимо обеспечить стабильный обмен данными между составляющими системы.

Преимущества инструмента:

  • масштабируемость;
  • возможность мониторинга и управления;
  • надежность — данные будут оставаться в очереди, пока получатель не направит подтверждение;
  • асинхронность — отправителю не нужно ждать подтверждения получателя для продолжения работы, что повышает отказоустойчивость и производительность.

Где еще применяется брокер:

  • В микросервисных архитектурах для обеспечения независимой работы каждого сервиса и обмена данными между ними.
  • При интеграции систем — брокер служит связующим звеном между системами и также отвечает за обмен данными между ними.
  • При фоновой обработке данных: отправка уведомлений, создание отчетов, загрузка файлов и другие. Здесь ключевую роль играет асинхронность. Фоновые операции выполняются в соответствии с их характеристиками: длительность, ресурсоемкость, срочность. То есть, ресурсы распределяются и используются эффективно, а основной поток программы при этом не блокируется.

Разница между Apache Kafka и RabbitMQ

Apache Kafka — это тоже брокер сообщений, который часто сравнивают с RabbitMQ, однако они имеют немало различий.

RabbitMQ:

  • Цель проекта — создание платформы для надежной передачи данных с акцентом на гибкость маршрутизации и интеграцию с другими системами.
  • Пользователю не нужно запрашивать данные, брокер отправляет их сам: модель умный сервер/тупой клиент. Данные хранятся в очередях до того момента, пока получатель их не обработает и не пришлет подтверждение.
  • Поддержка очередей с приоритетом. То есть, сообщения с более высоким приоритетом обрабатываются в первую очередь.
  • Поддержка множества протоколов: AMQP, MQTT, STOMP и HTTP.
  • Подходит для передачи данных между частями/сервисами одной системы, отслеживания и настройки этой передачи, настройки сложной маршрутизации. Также применяется для распределения фоновых задач в асинхронном формате. Используется для системной интеграции, или system integration, — процесса объединения нескольких систем для совместного использования данных и функций.

Apache Kafka:

  • Цель проекта — создание платформы, которая будет обрабатывать потоковые данные в реальном времени с высокой пропускной способностью и низкой задержкой.
  • Пользователь должен сам запросить данные, при этом платформа не проверяет, получил ли их пользователь: модель умный клиент/тупой сервер. Данные хранятся установленный промежуток времени.
  • Все сообщения рассматриваются как равные. Соответственно, они всегда располагаются в том порядке, в котором поступили.
  • Собственный бинарный протокол на основе TCP — это может затруднить интеграцию с другими системами, так как протокол поддерживает только Apache Kafka.
  • Лучше всего подходит для потоковой обработки Big Data, например, мониторинга метрик. Эффективен для работы с событиями, например, с транзакциями. Применяется для интеграции данных, или data integration, — процесса объединения данных из разных источников в единое представление.

Можно сказать, что среди этих инструментов нет худшего и лучшего, так как их применение сильно отличается: разные назначения, характеристики и сильные стороны. Поэтому при выборе платформы необходимо учитывать потребности конкретного проекта.

Заключение

RabbitMQ — это широко распространенный и мощный инструмент, который используется для обмена данными между сервисами. Он обладает гибкостью маршрутизации благодаря таким компонентам, как обменник и привязки. Маршрутизировать данные по очередям можно различными параметрами: платформа предоставляет встроенные типы распределения.

Второй особенностью, и скорее даже преимуществом является асинхронная обработка данных, позволяющая удерживать высокий уровень производительности и поддерживать независимость компонентов системы. Это преимущество также позволяет назвать инструмент подходящим для выполнения фоновых операций.

Платформа контролирует получение сообщений: пока получатель не направит подтверждение, данные будут оставаться в очереди. Работать с этим инструментом можно как в небольших, так и в крупных проектах благодаря легкой масштабируемости.

Инструмент идеально подходит для интеграции систем и сервисов, что актуально в современном мире, где мало систем существуют самостоятельно, чаще они связаны между собой.

Заключительная и немаловажная деталь — обмен данными не происходит сам по себе. Администраторы платформы всегда могут просматривать очереди, обменники, привязки и другие параметры, управлять обменом, а также получать уведомления об ошибках.