удалённому API(мой склад), у них стоит ограничение на кол-во отправляемых запросов 45 за 3 секунды. Дело в том, что я получаю первым запросом товары, прохожусь по ним циклом и нахожу массив с изображениями, в этом массиве нет самих изображения, а только ссылка с API запросом на получение этих изображений. Приходится отправлять ещё запрос, через раз вылетает ошибка из за превышения ограничения. Есть идея заводить sleep на 4 секунды после 44 запроса, тупо?))
самый тупой вариант - ловить в онлайне эксепшн на превышение ограничения и ретраить через какое-то время самый правильный вариант - использовать очереди и получать каждое изображение асинхронной джобой с опцией ретрая через какое-то количество времени
Зачем ретраить? Можно каждую отложить на секунду вперед, например.
затем, что втупую «отложить на секунду вперед» может выдать тебе ошибку в следующем запросе $response = Http::retry(3, 100)->post(...); сделает 3 попытки запроса с интервалом в 100мс каждая. Долой порнографию. И, да, наверняка вы этого не знаете, ведь этого фасада нет в вашей доисторической версии ларки)
Технический директор с воспитанием школьника. Ты можешь не ерничать, не? Во-первых, фасады говно. Во-вторых, есть миллион способов, как можно не допустить превышания лимита, и да, откладывая каждый запрос на секунду, ты обеспечишь их выравнивание по времени, вряд ли у тебя разом отправится 45 запросов. Можно от времени первого запроса, который получает записи, прибавлять.
> $response = Http::retry(3, 100)->post(...); сделает 3 попытки запроса с интервалом в 100мс каждая. Долой порнографию. Синхронно делать 3 запроса да еще с синхронным слипом, и ты меня учишь современной инфраструктуре, ага.
https://laravel-news.com/guzzle-advanced-throttling-middleware
просто отправляй 11 запросов в секунду, но опять же лучше используй какой-то механизм ретрайнинга, т.к. нет гарантий что запрос будет валидный
От души, то что надо
Лучше всего использовать джобы
Обсуждают сегодня