Этот вопрос проверяет понимание идемпотентности и умение придумать устойчивый способ избежать повторной обработки событий, даже если у события нет явного ID.
Короткий ответ
Если внешний сервис не присылает явный идентификатор события, можно построить «искусственный» ключ идемпотентности на основе содержимого события. Например, взять хеш от важных полей (тип события, сумма, время, внешний user_id) и хранить его в таблице обработанных событий. При получении нового события вы вычисляете тот же хеш и проверяете, обрабатывали ли вы его раньше. Иногда дополнительно используют временное окно (например, хранить такие ключи сутки), чтобы не копить вечный список. Главное — аккуратно выбрать поля, чтобы одинаковые по смыслу события давали один и тот же ключ, а разные — разные.
Длинный ответ
Зарегистрироваться
Развернутый ответ доступен только зарегистрированным пользователям.