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

После повторной доставки сообщения клиенту дважды списали деньги

Потребитель обрабатывает сообщения о платежах: создаёт проводку и списывает деньги. В инциденте воркер успел выполнить списание, но упал до подтверждения обработки сообщения (ack в очереди / фиксация смещения). После перезапуска брокер выдал то же сообщение снова, и списание произошло второй раз.

Как правильно защититься от таких дублей?

  • Сделать обработчик идемпотентным: писать идентификатор операции с уникальным ограничением
  • Подтверждать сообщение сразу при получении, до начала обработки — тогда повторов не будет
  • Оставить одного потребителя: при единственном воркере повторная доставка невозможна
  • Хранить в памяти процесса множество обработанных идентификаторов и пропускать повторы

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

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

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

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