Вступить в клуб →
средняявопросОчереди, надёжность и эксплуатация

Воркер получил одно и то же сообщение дважды

Воркер списывает деньги по событию payment.requested из брокера, который гарантирует доставку «хотя бы один раз». В отчёте нашли повторные списания: часть событий обработалась дважды после перезапуска подов.

Выберите два способа сделать обработку безопасной при повторной доставке.

правильных вариантов может быть несколько

  • Хранить ключ идемпотентности под уникальным индексом: повтор упрётся в конфликт и не даст побочного эффекта
  • Проверять в базе, обрабатывалось ли событие, делая проверку и запись результата в одной транзакции
  • Отключить повторную доставку в брокере и подтверждать сообщение сразу при получении, до начала обработки
  • Добавить случайную задержку перед обработкой, чтобы дубликат разошёлся во времени с оригиналом и не совпал с ним
  • Обрабатывать сообщения строго в один поток: при единственном воркере и последовательной обработке дубликаты невозможны

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела