Справочник по RabbitMQ
Назначение
CLI, конфигурация, типы обменников и свойства сообщений RabbitMQ в табличном виде. Учебный курс: RabbitMQ — работа с очередями, раздел микросервисов.
Краткое пояснение
RabbitMQ — брокер сообщений по протоколу AMQP 0-9-1. Производитель публикует в exchange, маршрутизация по binding и routing key кладёт копию в queue; потребитель читает из очереди и подтверждает ack. Очередь буферизует задачи и развязывает сервисы по времени.
Быстрый старт
docker run -d --hostname rabbit --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
rabbitmq:3-management
# веб-UI — http://localhost:15672 (guest/guest — только localhost)
rabbitmq-diagnostics ping
URI подключения: amqp://user:password@host:5672/vhost (порт 5672 — AMQP, 15672 — Management UI).
Справочные таблицы
Содержание справочника
- Сущности и порты
- Типы exchange
- Параметры объявления очереди
- Свойства сообщения (AMQP)
- Команды rabbitmqctl
- Политики (policies)
- Подтверждения и надёжность
- Клиентские библиотеки
- Конфигурация
- Типичные anti-patterns
- RabbitMQ и Kafka — когда что
Сущности и порты
| Сущность | Роль |
|---|---|
| Producer | Публикует сообщение в exchange |
| Exchange | Маршрутизатор: решает, в какие очереди попадёт сообщение |
| Binding | Связь exchange → queue (routing key, аргументы) |
| Queue | Буфер FIFO; сообщение удаляется после ack |
| Consumer | Читает из очереди (basic_consume / push-модель) |
| Channel | Логическое соединение внутри TCP; все операции — через канал |
| Virtual host (vhost) | Изоляция очередей, exchange и прав в одном кластере |
| Порт | Назначение |
|---|---|
| 5672 | AMQP (клиенты) |
| 5671 | AMQPS (TLS) |
| 15672 | HTTP Management UI |
| 15692 | Prometheus metrics (плагин) |
Типы exchange
| Тип | Маршрутизация | Типовой сценарий |
|---|---|---|
| direct | Точное совпадение routing_key с ключом binding | Задачи по типу: email, sms, push |
| fanout | Во все привязанные очереди, ключ игнорируется | Широковещание, инвалидация кэша |
| topic | Шаблон ключа: * — один сегмент, # — ноль и более | orders.created.eu, logs.error.# |
| headers | Совпадение заголовков (x-match: all / any) | Редко; когда ключ недостаточен |
| x-delayed-message | Отложенная доставка (плагин) | Retry с задержкой, отложенные уведомления |
Default exchange ("", type direct): routing key = имя очереди — быстрый point-to-point без явного exchange.
Параметры объявления очереди
| Параметр | Значение | Смысл |
|---|---|---|
durable | true | Очередь переживёт перезапуск брокера |
exclusive | true | Только текущее соединение; удалится при disconnect |
auto_delete | true | Удалить, когда отключится последний consumer |
x-message-ttl | мс | TTL сообщений в очереди |
x-max-length | число | Лимит сообщений (или x-max-length-bytes) |
x-dead-letter-exchange | имя | DLX при reject/nack/TTL/overflow |
x-dead-letter-routing-key | ключ | Routing key в DLX |
x-queue-type | classic / quorum / stream | Тип очереди (с 3.8+ quorum — HA по умолчанию для новых) |
Quorum queue — репликация на кворуме узлов, сильная согласованность; stream — лог событий с offset (ближе к Kafka).
Свойства сообщения (AMQP)
| Свойство | Описание |
|---|---|
delivery_mode | 1 — volatile, 2 — persistent (на диск при durable queue) |
content_type | MIME, напр. application/json |
content_encoding | gzip и т.д. |
priority | 0–9 (нужен x-max-priority на очереди) |
correlation_id | Связь запрос–ответ (RPC) |
reply_to | Имя очереди для ответа |
expiration | TTL сообщения (строка, мс) |
message_id | Идентификатор |
headers | Произвольные пары ключ–значение |
timestamp | Время (Unix) |
Команды rabbitmqctl
| Команда | Назначение |
|---|---|
rabbitmqctl status | Состояние узла, версии Erlang/RabbitMQ |
rabbitmqctl list_queues name messages consumers | Очереди и глубина |
rabbitmqctl list_exchanges name type | Обменники |
rabbitmqctl list_bindings | Привязки |
rabbitmqctl add_user USER PASS | Пользователь |
rabbitmqctl add_vhost VHOST | Виртуальный хост |
rabbitmqctl set_permissions -p VHOST USER ".*" ".*" ".*" | configure / write / read |
rabbitmqctl set_policy NAME PATTERN DEFINITION | Политика на очереди/exchange |
rabbitmq-plugins enable rabbitmq_management | Веб-UI |
rabbitmqctl purge_queue QUEUE -p VHOST | Очистить очередь (осторожно в prod) |
rabbitmqctl delete_queue QUEUE | Удалить очередь |
Пример политики HA (classic mirrored, устаревает в пользу quorum):
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' --apply-to queues
Политики (policies)
Политики задают поведение по regex имени очереди/exchange:
| Ключ в JSON | Эффект |
|---|---|
message-ttl | TTL всех сообщений |
max-length / max-length-bytes | Отбрасывание или DLX при переполнении |
dead-letter-exchange | DLX |
ha-mode | Зеркалирование classic-очередей (legacy) |
Задаются через UI, rabbitmqctl set_policy или HTTP API Management.
Подтверждения и надёжность
| Механизм | Описание |
|---|---|
| Consumer ack | basic_ack — сообщение удалено; без ack при disconnect — redelivery |
| nack / reject | requeue=true — вернуть в очередь; false — DLX или discard |
| Publisher confirm | Асинхронное подтверждение брокером (предпочтительнее транзакций AMQP) |
| mandatory | Если сообщение не маршрутизировано — возврат producer (с return listener) |
| prefetch (QoS) | basic_qos(prefetch_count=N) — лимит unacked на consumer |
| DLX | Очередь «мёртвых» писем для анализа и повторов |
Транзакции AMQP (tx_select / tx_commit) — высокая задержка; в новых проектах — confirms.
Клиентские библиотеки
| Язык | Библиотека | Пакет / координата |
|---|---|---|
| Java | Official | com.rabbitmq:amqp-client |
| C# | Official | RabbitMQ.Client |
| Python | Pika | pika |
| Python | aio | aio-pika |
| Node.js | amqplib | amqplib |
| Go | amqp091-go | github.com/rabbitmq/amqp091-go |
| PHP | php-amqplib | php-amqplib/php-amqplib |
| Rust | lapin | lapin |
Методы публикации: basic_publish(exchange, routing_key, body, properties). Потребление: basic_consume + callback или basic_get (pull, редко).
Конфигурация
| Файл / переменная | Назначение |
|---|---|
rabbitmq.conf | Основные параметры (новый формат ini) |
advanced.config | Erlang-термы для редких опций |
RABBITMQ_CONFIG_FILE | Путь к конфигу |
loopback_users.guest | Ограничить guest только localhost |
vm_memory_high_watermark.relative | Порог памяти (flow control) |
disk_free_limit.absolute | Минимум свободного диска |
Плагины: rabbitmq_management, rabbitmq_shovel, rabbitmq_federation, rabbitmq_delayed_message_exchange.
Типичные anti-patterns
| Проблема | Решение |
|---|---|
| Одна гигантская очередь на все типы задач | Отдельные очереди + direct/topic exchange |
auto_ack=true при критичных данных | Ручной ack после успешной обработки |
| Нет DLX при retry | DLX + отдельная очередь повторов с TTL |
Сообщения без delivery_mode=2 на durable queue | Persistent messages для переживания рестарта |
| Guest в production | Отдельные vhost, пользователи, TLS |
Синхронный RPC без timeout на reply_to | TTL, dead-letter, correlation_id |
RabbitMQ и Kafka — когда что
| Критерий | RabbitMQ | Kafka |
|---|---|---|
| Модель | Очередь задач, smart broker | Журнал событий (log), smart consumer |
| Потребление | Сообщение удаляется после ack | Offset, повторное чтение истории |
| Маршрутизация | Exchange, гибкие паттерны | Топик + партиции |
| Порядок | В пределах одной очереди | В пределах партиции |
| Типичное применение | Job queue, RPC, интеграция LOB | Event streaming, CDC, аналитика потоков |
Подробнее: Справочник по Apache Kafka.
В подборках
Статья входит в тематические маршруты из меню Подборки и блока «С чего начать?» на главной. Соседние шаги того же маршрута:
Справочники — Справочник по GraphQL, Справочник по Apache Kafka, Справочник по gRPC, Справочник по Docker, Справочник по SOAP, Справочник по Kubernetes.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Масштабирование — это сам процесс увеличения мощности системы, чтобы она выдерживала эту нагрузку. Для реализации используется фреймворк FastAPI, который обеспечивает высокую производительность и автоматическую генерацию документации API. Язык программирования Go (Golang) представляет собой мощный инструмент для создания высоконагруженных распределенных систем. Балансировка нагрузки - распределение трафика между узлами для масштабирования, отказоустойчивости и сглаживания пиков. Распределённая система — это совокупность независимых компонентов (серверов, узлов, микросервисов), которые взаимодействуют друг с другом через сеть для выполнения общей задачи. Интеграция микросервисов — это процесс объединения независимых сервисов в единую систему, чтобы они могли эффективно взаимодействовать и решать общие задачи. Мы уже изучали асинхронность, поэтому можем уже понять, что асинхронная коммуникация — это способ взаимодействия, при котором отправитель не ждёт немедленного ответа от получателя. Синхронная коммуникация — это способ взаимодействия, при котором отправитель отправляет запрос и ждёт ответа от получателя. REST — это просто набор правил, как писать HTTP-запросы так, чтобы тебя понимали другие программисты. Это не технология, не протокол, не библиотека. Это как правила этикета для API. Заголовок Sec-WebSocket-Key используется для предотвращения кэширования и проверки подлинности. Брокер сообщений — это программное обеспечение или система, которая управляет обменом данными между приложениями, сервисами или системами. RabbitMQ - очереди сообщений, модель производитель–потребитель и типовые сценарии интеграции микросервисов.Масштабирование микросервисных систем
Первые шаги к микросервисам
Go для микросервисов
Балансировка нагрузки
Архитектура микросервисов (MSA) и распределённые системы
Коммуникация и интеграция
Асинхронная коммуникация
Синхронная коммуникация
REST
Реактивная коммуникация
Брокеры сообщений
RabbitMQ