Открыть сервисСервис

RabbitMQ — система управления сообщениями

RabbitMQ — это открытый брокер сообщений (message broker), реализующий протокол AMQP (Advanced Message Queuing Protocol) и обеспечивающий асинхронный обмен сообщениями между приложениями и сервисами. Написан на языке Erlang, работает на платформах, поддерживающих Erlang/OTP, и поддерживает множество протоколов и клиентских библиотек. Является одним из наиболее распространённых брокеров сообщений в инфраструктуре микросервисов и распределённых систем.

История

RabbitMQ разработан компанией Rabbit Technologies Ltd., основанной в 2007 году Алексомисом Ричардсоном, Мэттью Тейлором и Алисой Кларк. Первый релиз вышел в 2007 году. В 2010 году компания была приобретена VMware, в 2013 году — компанией Pivotal Software (совместное предприятие VMware и EMC). С 2019 года RabbitMQ является частью портфеля VMware, которая в свою очередь была куплена Broadcom в 2023 году. Исходный код распространяется под лицензией Mozilla Public License 2.0.

Принцип работы

RabbitMQ реализует модель «производитель — брокер — потребитель». Отправляющее приложение (producer) публикует сообщения в обменники (exchanges), которые маршрутизируют их по правилам в очереди (queues). Потребители (consumers) подключаются к очередям и получают сообщения. Брокер гарантирует доставку, поддерживает подтверждения (acknowledgements), повторные попытки доставки и хранение сообщений на диске.

Основные концепции

  • Обменники (exchanges) — маршрутизаторы сообщений. Типы: direct (точное совпадение ключа маршрутизации), topic (шаблоны с подстановочными символами), fanout (широковещательная рассылка всем связанным очередям), headers (маршрутизация по заголовкам).
  • Очереди (queues) — буферы хранения сообщений. Поддерживают ограничения длины, TTL, приоритеты, dead-letter маршрутизацию.
  • Привязки (bindings) — правила связывания обменников с очередями.
  • Ключ маршрутизации (routing key) — строка, определяющая, куда доставить сообщение.
  • Виртуальные хосты (vhosts) — логические изоляции внутри одного экземпляра брокера, каждая со своими обменниками, очередями и правами доступа.

Протоколы и интеграции

Помимо AMQP 0-9-1, RabbitMQ поддерживает:

  • STOMP — текстовый протокол обмена сообщениями, часто используемый в веб-приложениях.
  • MQTT — лёгкий протокол для IoT-устройств.
  • AMQP 1.0 — поддержка в отдельном плагине.
  • HTTP API — для управления и мониторинга.

Для управления доступны веб-интерфейс RabbitMQ Management UI, REST API и CLI-утилиты. Существуют клиентские библиотеки для большинства популярных языков программирования, включая Python (pika, aio-pika), Java, JavaScript (amqplib), Go, .NET, Ruby, PHP.

Кластеризация и отказоустойчивость

RabbitMQ поддерживает объединение узлов в кластер. Каждый узел хранит состояние обменников, очередей и привязок. Для отказоустойчивости применяются:

  • Mirrored queues (classic mirrored queues) — зеркальные очереди, копии которых размещаются на нескольких узлах.
  • Quorum queues — очереди на основе алгоритма Raft, обеспечивающие консистентность и устойчивость к отказам узлов. Рекомендуются для большинства сценариев с гарантией доставки.
  • Streams — механизм append-only логов, появившийся в версии 3.9, для повторяемого чтения и хранения истории сообщений.

Для балансировки нагрузки перед кластером обычно размещается балансировщик уровня 4 (например, HAProxy).

Применение

RabbitMQ применяется в следующих сценариях:

  • Асинхронная обработка задач — выделение тяжёлых операций (генерация отчётов, отправка писем) в фоновые воркеры.
  • Микросервисная архитектура — слабосвязанное взаимодействие сервисов.
  • Интеграция систем — обмен данными между разнородными приложениями.
  • Очереди задач — паттерн «worker queue» с распределением нагрузки между потребителями.
  • IoT — сбор телеметрии через MQTT.

RabbitMQ используется в инфраструктуре ряда крупных компаний. В России и СНГ он широко применяется в веб-разработке и корпоративных ИТ-системах, в том числе в составе PaaS-платформ.

Сравнение с альтернативами

ПараметрRabbitMQApache KafkaActiveMQ
МодельБрокер с очередямиРаспределённый логБрокер с очередями
ПротоколAMQP, MQTT, STOMPСобственный протоколJMS, AMQP
ХранениеДо доставкиПостоянный логДо доставки
ГарантииПодтверждения, повторыAt-least-once, exactly-onceПодтверждения
Язык реализацииErlangJava/ScalaJava

Интересные факты

RabbitMQ написан на Erlang — языке, изначально разработанном для телефонных коммутаторов Ericsson, что обуславливает высокую конкурентность и отказоустойчивость брокера. Название происходит от сообщения «Rabbit that queues AMQP messages» и отсылает к книге «Долгое утро» (The Long Goodbye) Реймонда Чандлера.

Источники:

  • Документация RabbitMQ (rabbitmq.com)
  • Алан Антонов, «RabbitMQ in Action»
  • Гэвин Рой, «RabbitMQ Cookbook»
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru