Перейти к основному содержимому

Основы RabbitMQ – что нужно знать аналитику

В предыдущих постах мы немного рассмотрели Кафку, пришла очередь Кролика.

RabbitMQ – это брокер сообщений с открытым исходным кодом, который реализует протокол AMQP (Advanced Message Queuing Protocol). Применяется в системах для асинхронной интеграции, где требуется гибкая и надежная маршрутизация сообщений.

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

Например, одно и то же сообщение должны получить три подписчика. Оно попадает на узел (обменник), который отправит три одинаковых сообщения в три очереди для всех подписчиков, которым оно должно быть доставлено. При этом в очереди может храниться любое количество сообщений от неограниченного количества поставщиков, а получать их может неограниченное число подписчиков.

Подход к обмену сообщениями

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

В RabbitMQ после получения консьюмерами сообщение удаляется из очереди. Благодаря этому одно и то же сообщение может быть обработано только одним консьюмером и не хранится дольше необходимого.

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

Процесс обмена сообщениями в RabbitMQ

  1. Создается именованный обменник, который является точкой интеграции между продюсером и консьюмером. Обменник задает правила маршрутизации сообщений.
  2. Создаются одна или несколько очередей, которые привязываются к обменнику с помощью ключей маршрутизации.
  3. Продюсер отправляет сообщение в обменник.
  4. Обменник, получив сообщение, маршрутизирует его в одну или несколько очередей в соответствии с правилами привязки между ним и очередью.
  5. Очередь отправляет сообщение потребителям (одному или нескольким), которые подписались на “push-уведомления”.
  6. Потребитель обрабатывает сообщение, исходя из своей бизнес-логики и отправляет брокеру подтверждение об успешной обработке (ack) или отказе (nack).
  7. В случае успешной обработки брокер удаляет сообщение из очереди. В случае неудачной обработки со стороны потребителя (nack) сообщение остается в очереди, пока не будет успешно обработано.

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

Архитектура RabbitMQ

RabbitMQ является распределенной системой. Все серверы объединяются в кластеры. Пересылка сообщений идёт через специальные узлы, называемые обменниками (exchanges), которые могут иметь разные типы и правила маршрутизации. Обменники отправляют сообщения в очереди (queues). Обменники и очереди связаны через binding – правила, которое сообщает имеющемуся обмену в какой из очередей эти сообщения должны сохраняться. Очереди могут быть распределены между брокерами в кластере и реплицированы для надёжности.

RabbitMQ Architecture

Где используется RabbitMQ

RabbitMQ — это универсальный брокер сообщений. Он отлично подходит для интеграции микросервисов, потоковой передачи данных в режиме реального времени или при передаче работы удалённым работникам. Его используют крупные компании, в числе которых Bloomberg, Reddit, NASA и др.

📑 Статьи (теория)

  1. Официальная документация

  2. Цикл конспектов от Слёрм:

  3. RabbitMQ для аналитика: практический ликбез — подробно о RabbitMQ + практический пример

  4. AMQP на примере RabbitMQ: как же «готовить кролика»? — о принципе работы RabbitMQ на пальцах

📝 Статьи (практика)

  1. 101 способ приготовления RabbitMQ и немного о pipeline архитектуре (то же, только видео с HighLoad++)
  2. Построение распределенной системы очередей сообщений с RabbitMQ и Python
  3. Highly Available кластер RabbitMQ

▶️ Видео и вебинары

  1. Очереди сообщений с RabbitMQ: что такое, когда нужно, какие проблемы решает
  2. Разработка требований к Rabbit MQ — Зоя Степчева, Systems Education
  3. Системы обмена сообщениями: RabbitMQ и Kafka // Архитектура и шаблоны проектирования
  4. Очень (даже слишком) подробная лекция о RabbitMQ и Kafka: часть 1 и часть 2
  5. Использование RabbitMQ Streams — лекция от разработчика
  6. Брокеры сообщений RabbitMQ, Kafka и Redis в работе системного аналитика: как и когда использовать

Для любителей всё попробовать руками есть бесплатный видеокурс на YouTube.

📖 Книги

  1. Гайвин Рой. RabbitMQ для профессионалов — онлайн книга на русском
  2. Остальные книги на английском можно скачать здесь