Как реализовывал отложенные повторные попытки (retry) в RabbitMQ без потери сообщений?

Для retry нужны устойчивое хранение, задержка, подтверждение новой публикации и идемпотентная обработка. Обычная связка TTL и DLX сама по себе не гарантирует отсутствие потерь.

Короткий ответ

Что ответить на собеседовании

Для retry нужны устойчивое хранение, задержка, подтверждение новой публикации и идемпотентная обработка. Обычная связка TTL и DLX сама по себе не гарантирует отсутствие потерь.

Подробный разбор

Ответ с пояснениями

Для retry нужны устойчивое хранение, задержка, подтверждение новой публикации и идемпотентная обработка. Обычная связка TTL и DLX сама по себе не гарантирует отсутствие потерь.

Сообщение можно направить в retry-очередь с TTL и возвратом через DLX. Но по умолчанию dead-letter перепубликация может потерять сообщение при недоступности назначения. Для соответствующих quorum queues существует настраиваемый режим at-least-once dead-lettering.

При прикладной перепубликации дождитесь publisher confirm и проверьте маршрутизацию до подтверждения исходного сообщения; возможные дубли должен выдерживать consumer. Ограничьте попытки, разделяйте временные и постоянные ошибки, используйте DLQ и наблюдаемость. Повтор с requeue без задержки создаёт горячий цикл.

Источник: www.rabbitmq.com, www.rabbitmq.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее