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