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