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

Воркер упал после записи в БД, но до подтверждения сообщения

Сообщение «начислить кэшбэк» обрабатывается воркером: он пишет проводку в БД и затем подтверждает сообщение брокеру. Изредка процесс убивают деплоем ровно между этими шагами. После перезапуска сообщение приходит снова, и кэшбэк начисляется второй раз.

Что верно?

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

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

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

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

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