библиотеки что есть на рынке (типа retry-go), но у них общая проблема - нет “блокировки” параллельных таймаутов.
Скажем, если я с разных горутин вызову метод и в каждой горутине он провалится - у меня будет ддос.
На сколько это ОК идея в таком случае использовать мьютексы?
Я конечно думал об альтернативе собирать колбеки в массив, а дальше просто одной очередью все выполнять и тогда мьютексы не нужны.
Но на всякий случай переспрошу, вдруг кто сталкивался)
А что такое "параллельные таймауты"?
В разных горутинах свой счёт ретраев.
ну например, у меня есть функция которая отправляет запрос. я беру и в трех параллельных горутинах go func () {}() go func () {}() go func () {}() и получается что в каждом будет свой счет ретраев, да. но я хочу чтобы счет ретраев был общий. Как лучше поступить? если впали в “ретрай”, просто мьютексом залочить контекст, или лучше собирать это все в массив (массив функций), и просто по порядку разматывать? (массив функций я имею ввиду уже реализацию отправки запроса)
мутексом залочить контекст? ой, не надо.
погуглите либу singleflight - ощущение вы чет похожее хотите в итоге
Ну сделай мапу в которой будут лежать поинтеры на счётчики и под rwlock её.
Используй атомики. if sync.AddInt32(counter, 1) > maxRetries { return }
Обсуждают сегодня