Вопрос проверяет понимание обработки ошибок в очередях и умение проектировать надёжную доставку сообщений.
DLX (Dead Letter Exchange) — это специальный exchange в RabbitMQ, куда попадают сообщения, которые не удалось обработать. DLQ (Dead Letter Queue) — это очередь, привязанная к этому exchange. Сообщения попадают туда, если они были отклонены, истёк TTL или очередь была переполнена. Это позволяет не терять проблемные сообщения и анализировать причины ошибок. DLQ используют для отладки, ретраев и мониторинга.
При работе с очередями важно уметь корректно обрабатывать сбои и некорректные сообщения.
Определение: Dead Letter Exchange (DLX) — это exchange, в который перенаправляются сообщения, не доставленные или отклонённые в основной очереди.
Dead Letter Queue (DLQ) — это очередь, получающая такие сообщения из DLX.
Сообщение считается “dead-letter” в следующих случаях:
consumer вызвал reject / nack без requeue
у сообщения истёк TTL
очередь достигла лимита по длине
Настройка происходит на уровне очереди.
Пример концепции (упрощённо):
// очередь объявляется с аргументом x-dead-letter-exchange
x-dead-letter-exchange = dead.exchange
(привязка очереди и exchange обычно делается на уровне инфраструктуры)
не терять сообщения при ошибках
разбирать “плохие” сообщения отдельно
строить повторную обработку (retry)
повышать надёжность системы
основная очередь обрабатывает заказы
сообщение падает из-за некорректных данных
оно уходит в DLQ
разработчик анализирует причину или запускает повторную обработку
DLQ/DLX стоит использовать в любых системах с очередями, где потеря сообщений недопустима и важна прозрачная обработка ошибок.