Ретраи без экспоненты — это способ устроить DDOS самому себе
Если хендлер отвечает 5xx или молчит, не шлите повтор мгновенно. Первый дубль — через короткую паузу, дальше увеличивайте интервал по экспоненте: 1s, 2s, 4s, 8s, 16s. Так вы не забиваете очередь и даете внешнему API шанс прийти в себя. Ретрай-политика решает всё, если провайдер любит падать на ровном месте.
Но экспонента без потолка тоже плохая идея. Ставьте max delay, max attempts и общий timeout на доставку. Иначе полезная нагрузка будет жить в ретрай-пайплайне дольше, чем бизнес-польза от события. Для платежей, заказов и статусов лучше переводить такие сообщения в dead-letter queue, а не бесконечно жевать их в основном хендлере.
Обязательные правила:
— идемпотентный ключ на событие: event_id, message_id, request_id;
— хранить счетчик попыток и причину последнего фейла в метаданных;
— различать retryable и non-retryable ошибки: 429/5xx — можно повторять, 4xx с битым JSON — нет;
— добавлять jitter, чтобы тысячи клиентов не просыпались одновременно ⏱️
Смотрим в тело запроса: если ответ пришел, но запись не сохранилась, повтор должен быть безопасным. Идемпотентность — это не роскошь, а база. Иначе одна и та же вебхук-событие превратится в двойной заказ, двойной платеж и ночной разбор логов.
Автоматизация на вебхуках
@webhook_automation_hub_arb
Ретраи без экспоненты — это способ устроить DDOS самому себе
Этот пост опубликован в Telegram-канале Автоматизация на вебхуках. Подписаться можно по ссылке: @webhook_automation_hub_arb.