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

Справочник по 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).

Справочные таблицы

Содержание справочника


Сущности и порты

СущностьРоль
ProducerПубликует сообщение в exchange
ExchangeМаршрутизатор: решает, в какие очереди попадёт сообщение
BindingСвязь exchange → queue (routing key, аргументы)
QueueБуфер FIFO; сообщение удаляется после ack
ConsumerЧитает из очереди (basic_consume / push-модель)
ChannelЛогическое соединение внутри TCP; все операции — через канал
Virtual host (vhost)Изоляция очередей, exchange и прав в одном кластере
ПортНазначение
5672AMQP (клиенты)
5671AMQPS (TLS)
15672HTTP Management UI
15692Prometheus 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.


Параметры объявления очереди

ПараметрЗначениеСмысл
durabletrueОчередь переживёт перезапуск брокера
exclusivetrueТолько текущее соединение; удалится при disconnect
auto_deletetrueУдалить, когда отключится последний 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-typeclassic / quorum / streamТип очереди (с 3.8+ quorum — HA по умолчанию для новых)

Quorum queue — репликация на кворуме узлов, сильная согласованность; stream — лог событий с offset (ближе к Kafka).


Свойства сообщения (AMQP)

СвойствоОписание
delivery_mode1 — volatile, 2 — persistent (на диск при durable queue)
content_typeMIME, напр. application/json
content_encodinggzip и т.д.
priority0–9 (нужен x-max-priority на очереди)
correlation_idСвязь запрос–ответ (RPC)
reply_toИмя очереди для ответа
expirationTTL сообщения (строка, мс)
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-ttlTTL всех сообщений
max-length / max-length-bytesОтбрасывание или DLX при переполнении
dead-letter-exchangeDLX
ha-modeЗеркалирование classic-очередей (legacy)

Задаются через UI, rabbitmqctl set_policy или HTTP API Management.


Подтверждения и надёжность

МеханизмОписание
Consumer ackbasic_ack — сообщение удалено; без ack при disconnect — redelivery
nack / rejectrequeue=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.


Клиентские библиотеки

ЯзыкБиблиотекаПакет / координата
JavaOfficialcom.rabbitmq:amqp-client
C#OfficialRabbitMQ.Client
PythonPikapika
Pythonaioaio-pika
Node.jsamqplibamqplib
Goamqp091-gogithub.com/rabbitmq/amqp091-go
PHPphp-amqplibphp-amqplib/php-amqplib
Rustlapinlapin

Методы публикации: basic_publish(exchange, routing_key, body, properties). Потребление: basic_consume + callback или basic_get (pull, редко).


Конфигурация

Файл / переменнаяНазначение
rabbitmq.confОсновные параметры (новый формат ini)
advanced.configErlang-термы для редких опций
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 при retryDLX + отдельная очередь повторов с TTL
Сообщения без delivery_mode=2 на durable queuePersistent messages для переживания рестарта
Guest в productionОтдельные vhost, пользователи, TLS
Синхронный RPC без timeout на reply_toTTL, dead-letter, correlation_id

RabbitMQ и Kafka — когда что

КритерийRabbitMQKafka
МодельОчередь задач, smart brokerЖурнал событий (log), smart consumer
ПотреблениеСообщение удаляется после ackOffset, повторное чтение истории
МаршрутизацияExchange, гибкие паттерныТопик + партиции
ПорядокВ пределах одной очередиВ пределах партиции
Типичное применениеJob queue, RPC, интеграция LOBEvent streaming, CDC, аналитика потоков

Подробнее: Справочник по Apache Kafka.

В подборках

Статья входит в тематические маршруты из меню Подборки и блока «С чего начать?» на главной. Соседние шаги того же маршрута:

СправочникиСправочник по GraphQL, Справочник по Apache Kafka, Справочник по gRPC, Справочник по Docker, Справочник по SOAP, Справочник по Kubernetes.


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).