Как стать автором
Обновить

Комментарии 7

Прикольно, но я бы добавил вместо time.Sleep()

Долбаный хабр. Я хотел написпть, что всместо обычного time.Sleep(jitter) я бы предпочел
select {
case <-ctx.Done(): break
case <-time.After(jitter):
}

чтобы не ждать завершения слипа

Есть ряд внешних пакетов реализующие такой функционал - посоветуете что-то из них?

Да, есть. Просто самому не сильно сложнее это реализовать. Рекомендую cenkalti/backoff , так как это самая популярная и проверенная библиотека. Поддерживает экспоненциальные и постоянные задержки, легко интегрируется. Альтернативно можно глянуть avast/retry-go, у неё приятный декларативный API

А если в api к чему нибудь есть несколько методов, которые могут требовать повторов, логику ретрая надо имплементировать в каждом? Или правильней параллельный апи свести к последовательному типа command-parameters и один раз окружить это ретраями, таймаутами и анализом ошибок?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации