Основы RabbitMQ – что нужно знать аналитику
В предыдущих постах мы немного рассмотрели Кафку, пришла очередь Кролика.
RabbitMQ – это брокер сообщений с открытым исходным кодом, который реализует протокол AMQP (Advanced Message Queuing Protocol). Применяется в системах для асинхронной интеграции, где требуется гибкая и надежная маршрутизация сообщений.
Основная фишка RabbitMQ — это гибкая маршрутизация сообщений между различными поставщиками (продьюсерами) и потребителями (консьюмерами) событий. RabbitMQ – это не просто очередь данных между двумя сторонами, это менеджер очередей, который маршрутизирует данные в разные очереди сообщений. Продьюсер отправляет сообщения не в саму очередь, а на обменник, который сам распределяет сообщения между очередями.
Например, одно и то же сообщение должны получить три подписчика. Оно попадает на узел (обменник), который отправит три одинаковых сообщения в три очереди для всех подписчиков, которым оно должно быть доставлено. При этом в очереди может храниться любое количество сообщений от неограниченного количества поставщиков, а получать их может неограниченное число подписчиков.
Подход к об мену сообщениями
В RabbitMQ используется подход push, когда брокер сам активно отправляет сообщения консьюмерам, которые подписаны на очереди. Такой подход позволяет уменьшить задержку обработки данных и более равномерно распределить нагрузку между потребителями.
В RabbitMQ после получения консьюмерами сообщение удаляется из очереди. Благодаря этому одно и то же сообщение может быть обработано только одним консьюмером и не хранится дольше необходимого.
К минусам подхода push относится меньшая гибкость для потребителей. В отличие от модели pull, когда потребитель сам ходит за новыми сообщениями, когда ему надо, push не оставляет выбора потребителю – тот должен обработать поступившее сообщение. Кроме того, RabbitMQ не гарантирует порядок доставки сообщений.
Процесс обмена сообщениями в RabbitMQ
- Создается именованный обменник, который является точкой интеграции между продюсером и консьюмером. Обменник задает правила маршрутизации сообщений.
- Создаются одна или несколько очередей, которые привязываются к обменнику с помощью ключей маршрутизации.
- Продюсер отправляет сообщение в обменник.
- Обменник, получив сообщение, маршрутизирует его в одну или несколько очередей в соответствии с правилами привязки между ним и очередью.
- Очередь отправляет сообщение потребителям (одному или нескольким), которые подписались на “push-уведомления”.
- Потребитель обрабатывает сообщение, исходя из своей бизнес-логики и отправляет брокеру подтверждение об успешной обработке (ack) или отказе (nack).
- В случае успешной обработки брокер удаляет сообщение из очереди. В случае неудачной обработки со стороны потребителя (nack) сообщение остается в очереди, пока не будет успешно обработано.
В случае некорректного завершения работы сервера, данные в очереди не теряются. И при последующем запуске обработка продолжается с того места, где был обрыв.
Архитектура RabbitMQ
RabbitMQ является распределенной системой. Все серверы объединяются в кластеры. Пересылка сообщений идёт через специальные узлы, называемые обменниками (exchanges), которые могут иметь разные типы и правила маршрутизации. Обменники отправляют сообщения в очереди (queues). Обменники и очереди связаны через binding – правила, которое сообщает имеющемуся обмену в какой из очередей эти сообщения должны сохраняться. Очереди могут быть распределены между брокерами в кластере и реплицированы для надёжности.

Где используется RabbitMQ
RabbitMQ — это универсальный брокер сообщений. Он отл ично подходит для интеграции микросервисов, потоковой передачи данных в режиме реального времени или при передаче работы удалённым работникам. Его используют крупные компании, в числе которых Bloomberg, Reddit, NASA и др.
📑 Статьи (теория)
-
Цикл конспектов от Слёрм:
-
RabbitMQ для аналитика: практический ликбез — подробно о RabbitMQ + практический пример
-
AMQP на примере RabbitMQ: как же «готовить кролика»? — о принципе работы RabbitMQ на пальцах
📝 Статьи (практика)
- 101 способ приготовления RabbitMQ и немного о pipeline архитектуре (то же, только видео с HighLoad++)
- Построение распределенной системы очередей сообщений с RabbitMQ и Python
- Highly Available кластер RabbitMQ
▶️ Видео и вебинары
- Очереди сообщений с RabbitMQ: что такое, когда нужно, какие проблемы решает
- Разработка требований к Rabbit MQ — Зоя Степчева, Systems Education
- Системы обмена сообщениями: RabbitMQ и Kafka // Архитектура и шаблоны проектирования
- Очень (даже слишком) подробная лекция о RabbitMQ и Kafka: часть 1 и часть 2
- Использование RabbitMQ Streams — лекция от разработчика
- Брокеры сообщений RabbitMQ, Kafka и Redis в работе системного аналитика: как и когда использовать
Для любителей всё попробовать руками есть бесплатный видеокурс на YouTube.
📖 Книги
- Гайвин Рой. RabbitMQ для профессионалов — онлайн книга на русском
- Остальные книги на английском можно скачать здесь