За 30 секунд
RabbitMQ — open-source брокер сообщений. Продюсеры публикуют сообщения в exchange, exchange по правилам маршрутизирует их в очереди, а консьюмеры забирают сообщения из очередей и подтверждают их, когда работа выполнена. Он развязывает сервисы, сглаживает пики трафика и повторяет упавшие задачи. Актуальная линейка 4.x поддерживает AMQP 0-9-1, AMQP 1.0, MQTT и streams, а безопасным выбором по умолчанию являются реплицируемые quorum-очереди.
Не в моём ежедневном стеке — я понимаю принципы и изучу детали, когда это понадобится проекту.
Почему это важно
- Не каждая задача должна выполняться внутри HTTP-запроса. Брокер позволяет API мгновенно принять работу и передать письма, обработку изображений или интеграции фоновым консьюмерам.
- Его сильная сторона — маршрутизация: одно событие может попасть во много очередей по типу или шаблону, поэтому новых консьюмеров можно добавлять, не меняя продюсер.
- Он не привязан к языку: PHP-сервис может публиковать, а воркеры на Go, Python или Node.js — потреблять, что важно в полиглотных системах.
- Он находится между простыми очередями задач на Redis (например, BullMQ или очереди Laravel) и лог-платформой вроде Kafka: маршрутизация и гарантии доставки богаче, чем у первых, а эксплуатация проще, чем у второй.
Как это работает
01Идея: почта для сообщений
Представьте RabbitMQ как почтовое отделение. Продюсер приносит письмо (сообщение) к стойке (exchange) с адресной наклейкой (routing key). Почта раскладывает его по почтовым ящикам (очередям) согласно правилам (bindings). Консьюмер опустошает свой ящик и расписывается за каждое письмо (acknowledgement). Если консьюмер так и не расписался, письмо возвращается на повторную доставку. Благодаря такому разделению продюсеру не нужно знать, кто обработает сообщение, сколько существует воркеров и онлайн ли они прямо сейчас: сообщения спокойно ждут в очереди.
- Сообщение: полезная нагрузка (байты, обычно JSON) плюс свойства вроде content type, message ID и заголовков.
- Очередь: упорядоченный буфер, который хранит сообщения, пока их не заберёт консьюмер.
- Connection и channel: одно TCP-соединение на процесс, а внутри него лёгкие каналы для каждого потока или задачи.
02Exchange и маршрутизация
Продюсеры никогда не публикуют напрямую в очередь — они публикуют в exchange. Тип exchange определяет маршрутизацию. Direct exchange доставляет в очереди, у которых binding key точно совпадает с routing key. Topic exchange сопоставляет шаблоны с точками: «order.*» совпадает с «order.created», а «order.#» — с любой глубиной. Fanout exchange копирует каждое сообщение во все привязанные очереди, игнорируя ключи. Headers exchange маршрутизирует по значениям заголовков. Типичная схема для событий: один topic exchange на домен (orders, users) и одна очередь на каждую задачу консьюмера (email.order-created, analytics.orders), чтобы каждый консьюмер получал свою копию и работал в своём темпе.
- Default exchange: безымянный direct exchange, который направляет сообщение в очередь с тем же именем, что и routing key.
- Немаршрутизируемые сообщения отбрасываются, если не публиковать с флагом mandatory или не настроить alternate exchange.
03Типы очередей: quorum, classic и streams
Quorum-очереди реплицируют данные на нечётное число узлов с помощью алгоритма консенсуса Raft; сообщение подтверждается только после того, как его получило большинство, поэтому оно переживает отказ узла. Это рекомендуемый выбор для всего важного. Classic-очереди живут на одном узле и не реплицируются, с тех пор как RabbitMQ 4.0 убрал classic mirrored queues; они подходят для временной или воспроизводимой работы. Streams — это append-only лог: консьюмеры читают с определённого offset, а сообщения не удаляются при потреблении, что даёт replay и очень большой fan-out, похоже на топики Kafka. Quorum-очереди также поддерживают delivery limit, который защищает от poison-сообщений, раз за разом роняющих консьюмеров.
04Надёжная публикация
Durable-очереди и persistent-сообщения переживают перезапуск брокера, но они не сообщают продюсеру, что брокер получил сообщение. Для этого используйте publisher confirms: брокер подтверждает каждое сообщение, как только оно надёжно сохранено (для quorum-очередей — реплицировано на большинство). Если подтверждение не пришло или вернулся nack, опубликуйте повторно. Давайте каждому сообщению уникальный messageId, чтобы консьюмеры могли обнаруживать дубликаты: из-за повторов доставка становится at-least-once. Объявляйте exchange и очереди в коде или в файле definitions, чтобы окружения были воспроизводимыми.
import amqp from "amqplib";
const conn = await amqp.connect("amqp://your_user:your_password@localhost:5672");
const ch = await conn.createConfirmChannel();
await ch.assertExchange("orders", "topic", { durable: true });
await ch.assertQueue("email.order-created", {
durable: true, arguments: { "x-queue-type": "quorum" },
});
await ch.bindQueue("email.order-created", "orders", "order.created");
ch.publish("orders", "order.created", Buffer.from(JSON.stringify({ orderId: 42 })), {
persistent: true, contentType: "application/json", messageId: "order-42-created",
});
await ch.waitForConfirms(); // throws if the broker rejected the message
05Потребление: ack, prefetch и повторы
Консьюмеры должны использовать ручные подтверждения: ack только после того, как работа успешно выполнена. Если консьюмер упал до ack, RabbitMQ повторно доставит сообщение другому консьюмеру. Prefetch (basic.qos) ограничивает, сколько неподтверждённых сообщений держит один консьюмер; без него брокер отдаёт всё первому консьюмеру, а остальные простаивают. Начните с prefetch 10–50 и подстраивайте. При ошибке решите: вернуть в очередь при временной ошибке или отклонить без requeue, чтобы сообщение ушло в dead letter exchange (DLX) для разбора или отложенного повтора. Никогда не делайте ack до обработки и делайте обработчики идемпотентными.
await ch.prefetch(20);
await ch.consume("email.order-created", async (msg) => {
if (!msg) return;
try {
const event = JSON.parse(msg.content.toString());
await sendOrderEmail(event.orderId); // must be idempotent
ch.ack(msg);
} catch (err) {
// false, false = do not requeue: route to the dead letter exchange
ch.nack(msg, false, false);
}
}, { noAck: false });
06Dead letters, политики и эксплуатация
Dead letter exchange получает сообщения, которые были отклонены, истекли по TTL или превысили delivery limit. Настраивайте его через политику, а не жёстко прописанными аргументами очереди, потому что политики можно менять без повторного объявления очередей. Классический паттерн повторов направляет упавшие сообщения в retry-очередь с TTL, чей собственный DLX указывает обратно на рабочий exchange, — так получаются отложенные повторы. Запускайте RabbitMQ как кластер из трёх узлов для quorum-очередей, включите management-плагин для UI и HTTP API, отдавайте метрики через Prometheus-плагин, используйте TLS и отдельных пользователей для каждого приложения с ограниченными правами на vhost. Удалите стандартного пользователя guest, который и так работает только с localhost.
# Dead-letter failed messages and cap redeliveries for all email.* queues
rabbitmqctl set_policy email-dlx "^email\." \
'{"dead-letter-exchange":"dlx","delivery-limit":5}' --apply-to quorum_queues
rabbitmqctl add_vhost shop
rabbitmqctl add_user orders_app 'use-a-strong-password'
rabbitmqctl set_permissions -p shop orders_app '^orders.*' '^orders.*' '^(orders|email).*'
Когда применять
- Фоновые задачи и распределение работы между воркерами, написанными на разных языках.
- Уведомления о событиях, когда одно событие должно дойти до нескольких независимых консьюмеров с гибкой маршрутизацией.
- Сглаживание пиков трафика, чтобы медленные downstream-системы (ERP, почта, платёжные провайдеры) не перегружались.
- Request/reply и рабочие очереди, которым нужны подтверждение каждого сообщения, повторы и dead lettering.
Когда не стоит
- Долгосрочное хранение событий и replay многими консьюмерами при очень высокой пропускной способности; лучше подойдут Kafka или RabbitMQ Streams.
- Один монолит с простыми фоновыми задачами, где очередь на Redis (BullMQ, очереди Laravel) проще в эксплуатации.
- Синхронная обработка запросов, когда вызывающей стороне нужен немедленный ответ; используйте прямой вызов API.
Альтернативы
- Очереди на Redis (BullMQ, очереди Laravel)
Очень просто для стека одного приложения; меньше возможностей маршрутизации и слабее гарантии надёжности.
- Apache Kafka
Распределённый лог для высоконагруженного event streaming с retention и replay; тяжелее в эксплуатации.
- Amazon SQS / SNS
Полностью управляемые очереди и fan-out в AWS; без серверов, доставка at-least-once, ограниченная маршрутизация.
- NATS (JetStream)
Лёгкий и очень быстрый обмен сообщениями с опциональным хранением; во многих случаях проще Kafka.
Лучшие практики
- Используйте quorum-очереди для важной работы и публикуйте с publisher confirms.
- Используйте ручные ack, подтверждайте только после успеха и задавайте лимит prefetch каждому консьюмеру.
- Делайте консьюмеров идемпотентными с уникальным messageId, потому что доставка — at-least-once.
- Настраивайте dead letter exchange и delivery limit через политики и мониторьте dead letter очереди.
- Переиспользуйте одно долгоживущее соединение на процесс с каналами на задачу; не открывайте соединение на каждое сообщение.
- Держите сообщения маленькими (ID и самое необходимое), а большие данные храните в другом месте.
- Мониторьте глубину очередей, число консьюмеров, неподтверждённые сообщения и алармы памяти или диска с помощью Prometheus и Grafana.
Частые ошибки
- Использование auto-ack, из-за которого упавший консьюмер молча теряет сообщения.
- Отсутствие лимита prefetch: один консьюмер копит тысячи сообщений, пока остальные простаивают.
- Бесконечный requeue упавших сообщений, создающий горячий цикл poison-сообщения.
- Очереди, выросшие до миллионов сообщений без алертов, пока брокер не упрётся в аларм памяти или диска и не заблокирует продюсеров.
- Открытие нового соединения на каждую публикацию, что исчерпывает ресурсы под нагрузкой.
Глубже
07Quorum-очереди изнутри
Quorum-очередь — это группа Raft: один лидер и фолловеры на других узлах, обычно три или пять участников. Публикации идут к лидеру, который дописывает их в свой лог и реплицирует; как только большинство записало запись на диск, лидер подтверждает её продюсеру. Если узел лидера падает, оставшееся большинство за секунды выбирает нового лидера, и консьюмеры продолжают работу. Поскольку каждое сообщение реплицируется и проходит fsync, quorum-очереди больше нагружают дисковый I/O и лучше всего подходят для очередей, которые регулярно разгребаются, а не для миллионов сообщений, лежащих днями. Они считают повторные доставки, применяют delivery limit (значение по умолчанию есть начиная с 4.0) и поддерживают приоритеты сообщений начиная с 4.0. Очень длинные очереди стоит превращать в streams.
- Для большинства очередей используйте три участника; пять переживают два отказа, но стоят дороже.
- Участники размещаются по узлам кластера; держите узлы в разных зонах доступности.
08Flow control, алармы и back-pressure
RabbitMQ защищает себя сам. Когда потребление памяти на узле превышает high watermark (по умолчанию долю RAM) или свободное место на диске опускается ниже disk limit, он поднимает аларм и блокирует все публикующие соединения во всём кластере, пока ресурсы не восстановятся. Консьюмеры продолжают работать — так система разгружается. Credit-based flow control также притормаживает быстрых продюсеров, обгоняющих процессы очередей. На практике алармы — это симптом того, что очередь растёт быстрее, чем потребляется. Задавайте политики max-length или TTL для очередей, которые могут расти без ограничений, ставьте алерты на скорость роста глубины очереди, масштабируйте консьюмеров и давайте брокеру быстрые диски с запасом. Клиенты должны обрабатывать уведомление connection.blocked и останавливать или буферизовать публикацию.
09Повторы с backoff и poison-сообщения
Немедленный requeue повторяет слишком быстро и может зациклить poison-сообщение. Надёжный паттерн использует dead lettering для задержек: при ошибке консьюмер отклоняет сообщение, и оно через DLX попадает в retry-очередь с message TTL (например, 30 секунд) и без консьюмеров; когда TTL истекает, эта очередь отправляет его как dead letter обратно в основной exchange. Используйте несколько retry-очередей для экспоненциальных шагов (30 s, 5 min, 30 min) и считайте попытки в заголовке или опирайтесь на заголовок x-delivery-count в quorum-очередях. После последней попытки направляйте сообщение в parking-очередь, которую разбирает человек. Существует и плагин delayed message exchange, но он не реплицируется, поэтому для критичной работы TTL-очереди безопаснее.
# Retry queue: holds failed messages for 30 s, then sends them back
rabbitmqctl set_policy retry-30s "^retry\.30s$" \
'{"message-ttl":30000,"dead-letter-exchange":"orders"}' --apply-to queues
# Main work queues dead-letter into the retry exchange
rabbitmqctl set_policy work-dlx "^email\." \
'{"dead-letter-exchange":"retry","delivery-limit":10}' --apply-to quorum_queues
10Exactly-once — миф: идемпотентность и outbox
Сеть может отказать между «обработано» и «подтверждено», а также между «опубликовано» и «confirmed», поэтому любая надёжная система работает как at-least-once. Безопасным это делают два паттерна. Transactional outbox на стороне продюсера: запишите бизнес-изменение и строку outbox в одной транзакции базы данных, а relay пусть публикует строки outbox с confirms и помечает их отправленными. Это предотвращает ситуации «заказ сохранён, а событие потеряно» и «событие отправлено, а заказ откатился». Идемпотентный консьюмер на принимающей стороне: сохраняйте ID обработанных сообщений (или используйте естественные ключи и upsert) в той же транзакции, что и побочный эффект, и пропускайте дубликаты. С обоими паттернами система ведёт себя так, будто доставка происходит ровно один раз.
Реальные ситуации
Очередь растёт во время распродажи
Проблема
Во время распродажи очередь писем о заказах вырастает до 400 000 сообщений, письма приходят с опозданием на часы, а брокер поднимает аларм памяти, блокирующий продюсеров, включая checkout.
Как решить
В краткосрочной перспективе масштабируйте консьюмеров писем и проверьте их prefetch: при prefetch 1 и медленном SMTP-вызове поднимите его до 20–50 и отправляйте параллельно в пределах лимитов провайдера. Проверьте метрику consumer utilisation в management UI. Разделите критичный и некритичный трафик: события checkout не должны делить vhost или нагрузку узла с массовыми рассылками, поэтому вынесите почту в отдельную очередь с политикой max-length или TTL. В долгосрочной перспективе ставьте алерты на рост глубины очередей, проводите нагрузочное тестирование пайплайна перед кампаниями и обрабатывайте connection.blocked в продюсере checkout с локальным outbox, чтобы аларм брокера никогда не ронял платёж.
Poison-сообщение роняет каждого консьюмера
Проблема
Одно некорректное сообщение заставляет консьюмер выбросить необработанную ошибку. Оно возвращается в очередь, его подхватывает следующий консьюмер, который тоже падает, и очередь перестаёт двигаться.
Как решить
Ловите ошибки для каждого сообщения и делайте nack без requeue для ошибок, которые никогда не исправятся сами, например ошибок валидации, чтобы сообщение ушло в dead letter очередь. Задайте политику delivery-limit на quorum-очереди (например, 5), чтобы даже падения до nack прекращались после нескольких попыток. Добавьте parking-очередь и алерт на её глубину. Логируйте messageId и ошибку, исправьте продюсер или парсер и после исправления переиграйте отложенные сообщения через shovel или небольшой скрипт. Добавьте контрактный тест, проверяющий схему сообщения и на стороне продюсера, и на стороне консьюмера.
Миграция с classic mirrored queues
Проблема
Команда эксплуатирует старый кластер RabbitMQ 3.x с classic mirrored queues и хочет обновиться до 4.x, где зеркалирования больше нет.
Как решить
Сначала проведите инвентаризацию очередей и политик, которые задают ha-mode. Обновитесь в рамках 3.13 до последнего патча, включите все стабильные feature flags, затем мигрируйте важные очереди на quorum-очереди. Поскольку тип очереди нельзя поменять на месте, используйте blue-green подход: объявите новые quorum-очереди (или новый vhost), направьте продюсеров на новые привязки exchange, дайте консьюмерам разобрать старые очереди, затем удалите их. Проверьте возможности клиентов: global QoS и некоторые настройки transient или exclusive ведут себя иначе. Удалите политики ha-*, затем обновитесь до 4.x и убедитесь, что лидеры quorum-очередей равномерно распределены по узлам.
Шпаргалка
- Запуск локально с management UI
docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:4-management- Список очередей с глубиной и консьюмерами
rabbitmqctl list_queues name type messages consumers- Объявить quorum-очередь (аргумент клиента)
{ "x-queue-type": "quorum" }- Задать prefetch (Node.js amqplib)
await channel.prefetch(20);- Отклонить в dead letter
channel.nack(msg, false, false);- Проверка здоровья кластера
rabbitmq-diagnostics check_running && rabbitmq-diagnostics check_local_alarms- Экспорт definitions
rabbitmqctl export_definitions /tmp/definitions.json- Включить метрики Prometheus
rabbitmq-plugins enable rabbitmq_prometheus # scrape :15692/metrics- Удалить стандартного пользователя guest
rabbitmqctl delete_user guest
Вопросы и ответы
Q1Чем exchange отличается от очереди?
Очередь хранит сообщения, пока их не заберёт консьюмер, — это почтовый ящик. Exchange ничего не хранит — это сортировочный центр, который принимает сообщения от продюсеров и решает, какие очереди получат копию, исходя из своего типа и bindings. Direct exchange точно сопоставляет routing key, topic exchange — шаблоны, fanout рассылает во все привязанные очереди, а headers exchange сравнивает значения заголовков. Именно это разделение делает RabbitMQ гибким: продюсеры публикуют в exchange и не обязаны знать, сколько существует очередей и консьюмеров, поэтому новый консьюмер добавляется простой привязкой новой очереди.
Q2Как гарантировать, что сообщения не потеряются?
Должны работать сразу несколько уровней. На брокере — durable quorum-очереди, которые реплицируются на большинство узлов, и persistent-сообщения. На стороне продюсера — publisher confirms и повторная публикация всего, что не подтверждено. Используйте публикацию с mandatory или alternate exchange, чтобы немаршрутизируемые сообщения не отбрасывались молча. На стороне консьюмера — ручные подтверждения и ack только после выполнения работы, чтобы падение приводило к повторной доставке, а не к потере. И наконец, мониторьте dead letter очереди. В результате получается доставка at-least-once, а значит, консьюмеры должны быть идемпотентными, чтобы переживать редкие дубликаты.
Q3Что такое prefetch и как его выставить?
Prefetch, задаваемый через basic.qos, — это максимальное число неподтверждённых сообщений, которое брокер отдаст одному консьюмеру или каналу. Без лимита брокер отправляет столько сообщений, сколько может, любому подключённому консьюмеру, поэтому один воркер может держать тысячи, пока другой простаивает, а при падении всё возвращается разом. Низкий prefetch, например 1, даёт справедливое распределение для медленных тяжёлых задач; более высокое значение, например 20–100, повышает пропускную способность для быстрых задач, скрывая сетевую задержку. Начните примерно с 10–50, измерьте пропускную способность и загрузку консьюмеров и подстройте.
Q4RabbitMQ или Kafka?
Они решают разные задачи. RabbitMQ — брокер, ориентированный на маршрутизацию и доставку отдельных сообщений: сообщения попадают в очереди, консьюмеры их подтверждают, и они удаляются; есть гибкая маршрутизация, приоритеты, TTL и dead lettering. Kafka — распределённый append-only лог: сообщения хранятся днями или вечно, консьюмеры отслеживают offset и могут делать replay, а партиционирование даёт очень высокую пропускную способность с порядком по ключу. Выбирайте RabbitMQ для очередей задач, воркфлоу и интеграций со сложной маршрутизацией. Выбирайте Kafka для event streaming, аналитических пайплайнов и event sourcing, где важен replay. RabbitMQ Streams сокращают разрыв при умеренной потребности в replay.
Q5Что такое dead letter exchange?
Dead letter exchange — обычный exchange, который получает сообщения, которые RabbitMQ не смог обработать в исходной очереди: отклонённые консьюмером без requeue, сообщения с истёкшим TTL, сообщения, отброшенные из-за превышения лимита длины очереди, а в quorum-очередях — сообщения, превысившие delivery limit. Вы привязываете к нему dead letter очередь, ставите алерт на её глубину и после исправления бага разбираете или переигрываете сообщения. В сочетании с TTL-очередью он также реализует отложенные повторы. Это страховочная сетка, которая превращает poison-сообщение из бесконечного цикла в видимую и исправимую проблему.
Q6Гарантирует ли RabbitMQ порядок сообщений?
В пределах одной очереди сообщения доставляются в порядке публикации, если консьюмер один и нет requeue. При нескольких консьюмерах сообщения обрабатываются параллельно, поэтому порядок завершения не гарантирован, а возвращённое или повторно доставленное сообщение может прийти после более поздних. Если строгий порядок важен для сущности, например для всех событий одного заказа, маршрутизируйте по ключу в отдельную очередь на партицию с помощью consistent hash exchange или используйте single active consumer на очереди. Часто лучшее решение — спроектировать консьюмеров так, чтобы они переносили смену порядка, например с помощью номеров версий.
Вопросы уровня senior
S1Как бы вы спроектировали событийную архитектуру на RabbitMQ для нескольких сервисов?
Я бы создал по одному durable topic exchange на каждый bounded context (orders, payments, users), которым владеет публикующий сервис, с routing key вида order.created.v1, включающими версию. Каждый сервис-потребитель объявляет собственную quorum-очередь под каждую задачу и привязывает нужные ему ключи, поэтому сервисы развиваются независимо. Продюсеры публикуют через transactional outbox с confirms; консьюмеры идемпотентны и используют ручные ack, prefetch, DLX с отложенными повторами и parking-очередь. Схемы сообщений живут в общем репозитории контрактов с тестами совместимости. Каждый сервис получает своего пользователя с правами только на свои exchange и очереди. Для наблюдаемости я бы добавил заголовки трейсинга. Компромисс по сравнению с Kafka — нет долгого хранения и replay, поэтому, если консьюмерам нужна история, я бы добавил Streams или отдельный лог.
S2Как гарантировать порядок по сущности при масштабировании консьюмеров?
Одна очередь с множеством консьюмеров обрабатывает сообщения параллельно, поэтому порядок нарушается. Варианты: использовать single active consumer на очереди — порядок сохраняется, но параллелизм теряется, а остальные консьюмеры работают как горячий резерв. Для масштабирования нужно партиционирование: consistent hash exchange маршрутизирует по хешу ID заказа в N очередей, у каждой из которых single active consumer, так что каждая сущность всегда попадает в одну и ту же очередь и обрабатывается по порядку, а пропускная способность растёт с N. Streams с super streams дают похожую партиционированную модель. Повторные доставки при requeue всё ещё могут нарушить порядок внутри партиции, поэтому предпочитайте паттерны повторов, которые ненадолго блокируют партицию, или проектируйте консьюмеров с проверкой версий, чтобы устаревшее событие игнорировалось. Порядок всегда стоит пропускной способности или сложности.
S3Когда выбирать RabbitMQ Streams вместо quorum-очередей?
Quorum-очереди предназначены для распределения работы: каждое сообщение обрабатывается одним консьюмером и удаляется после ack, есть повторы и dead lettering. Streams — это реплицируемый append-only лог: сообщения остаются, пока их не удалит retention, консьюмеры читают с любого offset, и много консьюмеров могут читать одни и те же данные без копий по очередям. Выбирайте streams для большого fan-out (сотни консьюмеров одних и тех же событий), replay после бага или для нового консьюмера, очень длинных бэклогов или высокой пропускной способности через бинарный stream-протокол. Оставайтесь на quorum-очередях, когда нужны ack для каждого сообщения, delivery limit, приоритеты и воркфлоу с DLX. Streams не поддерживают dead lettering, а консьюмеры должны сами отслеживать свои offset, что перекладывает ответственность на приложение.
Глоссарий
- Брокер
- Сервер, который принимает, хранит и доставляет сообщения между приложениями.
- Exchange
- Компонент маршрутизации, который принимает опубликованные сообщения и копирует их в привязанные очереди.
- Binding
- Правило, связывающее exchange с очередью, часто с routing key или шаблоном.
- Routing key
- Метка на сообщении, по которой exchange решает, куда его отправить.
- Quorum-очередь
- Реплицируемый тип очереди на основе Raft, который переживает отказ узлов.
- Acknowledgement
- Сигнал консьюмера о том, что сообщение обработано и его можно удалить.
- Prefetch
- Максимальное число неподтверждённых сообщений, одновременно отданных одному консьюмеру.
- Dead letter exchange
- Exchange, который получает отклонённые, истёкшие или превысившие лимит повторов сообщения.
- Publisher confirm
- Подтверждение брокера продюсеру о том, что сообщение надёжно сохранено.
- Vhost
- Виртуальный хост: изолированное пространство имён для exchange, очередей и прав доступа.
Что изучить дальше
Есть идея продукта?Давайте создадим его.
Расскажите о своей идее, продукте или команде. Обычно отвечаю в течение одного рабочего дня.