Вопрос с собеседования · Spring

Слушатель RabbitMQ при ошибке обработки делает nack с requeue = true. Чем это опасно?

MiddleSpring AMQP и RabbitMQRabbitMQ
Ещё спрашивают так:
  • Что делать с ядовитым сообщением в RabbitMQ?
Коротко

Брокер вернёт сообщение немедленно и без задержки — ядовитое сообщение крутится в бесконечном цикле, нагружает CPU и брокер, задерживает остальные.

  • Постоянные ошибки — reject без requeue → DLX (x-dead-letter-exchange)
  • Временные — повторы с отсрочкой (retry interceptor, TTL-очередь с DLX)
  • default-requeue-rejected=false в Spring AMQP

А ещё Ограничение доставок — x-delivery-limit в quorum queues

Подробно

Различайте характер ошибки. Временный сбой (недоступна база) действительно имеет смысл повторить, но с задержкой и ограничением попыток. Ошибка в самих данных при повторе воспроизведётся всегда, поэтому такое сообщение нужно убирать из потока. Стандартное решение — nack с requeue = false и настроенный dead-letter exchange: сообщение уходит в отдельную очередь, где его можно разобрать вручную, не блокируя обработку остальных. Отложенные повторы делают через очередь с TTL и dead-lettering обратно либо средствами Spring Retry в слушателе. В Spring AMQP по умолчанию неперехваченное исключение как раз приводит к отклонению без возврата, и это разумное умолчание.

Что хотят услышать

  • Почему цикл.
  • DLX и повторы с отсрочкой.

Частые ошибки

  • Возвращать в очередь сообщение с невалидными данными.
  • Настраивать повторы без ограничения числа попыток.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Сообщение будет потеряно, так как requeue отменяет доставку
  • ✗Ничем: брокер сам добавит нарастающую задержку перед повторной доставкой
  • ✗Очередь будет автоматически удалена после трёх попыток
  • ✓Сообщение тут же приходит снова: устойчивая ошибка даёт бесконечный цикл

Что спросят дальше

  • Как сделать отложенный повтор через TTL и DLX?
  • Как отличить временную ошибку от постоянной в коде слушателя?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования