Вопрос проверяет понимание надежности очередей и типичных проблем распределенных систем.
Повторная доставка может приводить к дубликатам операций, нарушению консистентности и двойным списаниям. Также могут возникать проблемы с состоянием и порядком обработки. Поэтому обработчики должны быть идемпотентными. Часто используют дедупликацию или хранение идентификаторов сообщений.
Основные причины:
Потеря подтверждения обработки
Падение воркера
Таймаут обработки
Повторная публикация
Брокер считает сообщение необработанным и отправляет его снова.
Примеры:
повторное списание денег
повторное создание заказа
повторная отправка уведомления
Если операция не идемпотентна:
состояние системы становится некорректным
Некоторые системы требуют строгого порядка сообщений.
Повторная доставка может:
изменить порядок
вызвать логические ошибки
Идемпотентные обработчики
Хранение message_id
Дедупликация
Транзакции
Пример логики:
if message_id in processed_messages:
return
process()
save(message_id)
Повторная доставка — нормальное поведение очередей, поэтому обработчики должны быть устойчивыми к дубликатам.