Комментарии 7
Прикольно, но я бы добавил вместо time.Sleep()
Есть ряд внешних пакетов реализующие такой функционал - посоветуете что-то из них?
Да, есть. Просто самому не сильно сложнее это реализовать. Рекомендую cenkalti/backoff
, так как это самая популярная и проверенная библиотека. Поддерживает экспоненциальные и постоянные задержки, легко интегрируется. Альтернативно можно глянуть avast/retry-go
, у неё приятный декларативный API
А если в api к чему нибудь есть несколько методов, которые могут требовать повторов, логику ретрая надо имплементировать в каждом? Или правильней параллельный апи свести к последовательному типа command-parameters и один раз окружить это ретраями, таймаутами и анализом ошибок?
Интересно
Ещё по данной теме есть отличная статья, в которй более подробно рассказано про exponential backoff и его недостатки:
https://habr.com/en/companies/yandex/articles/762678/
Retry в Go: От граблей к дзену отказоустойчивости