5 / 15
Почему обработчик событий должен быть идемпотентным и как этого добиться?
Практически все событийные системы дают гарантию at-least-once — «хотя бы один раз»: при сетевой ошибке, таймауте подтверждения или повторе пачки одно и то же событие приходит дважды. Без защиты это означает двойные списания, дубли писем и задвоенные записи. Идемпотентность — свойство обработчика давать один и тот же результат при повторной обработке того же события. Достигается ключом идемпотентности (идентификатор сообщения или бизнес-ключ) и его проверкой в надёжном хранилище: уникальный индекс в базе, условная запись в key-value хранилище с TTL, INSERT ... ON CONFLICT DO NOTHING. «Ровно один раз» на практике собирается из at-least-once плюс дедупликация.