слишком быстро отправляются запросы
На одном сайте имеется лимит запросов 60 в минуту, но в моем коде запросы очень быстро отправляются и я не могу нормально их отправлять, какие методы нужны, чтобы настроит время отправки запросов?
Ответы (1 шт):
вот Вам подсказывают в каментах почитать про Thread.sleep - это самый простой способ реализовать Ваше условие.
Thread.sleep(1000L); // ждем секунду перед отправкой запроса, что бы не превысить лимит 60 запросов в минуту.
очевидно, что такой подход весьма не эффективен, т.к. даже если у Вас 1 запрос, он будет ждать целую секунду :)
следующий шаг - запоминать время предыдущего запроса и спать ровно столько сколько нужно. примерно так:
static final long THRESHOLD = 1000L;
static volatile long lastRequestTime;
// ...
synchronized void request() throws Exception {
long deltaTime = System.currentTimeMillis() - lastRequestTime;
if(deltaTime < THRESHOLD) {
Thread.sleep(THRESHOLD - deltaTime);
}
executeRequest();
lastRequestTime = System.currentTimeMillis();
}
в этом случае запросы не будут ждать "вхолостую", но и недостатков остается тоже куча
- синхронизация
- блокировка потока
- обработка ошибок (различать ошибки до и после отправления)
если нужно элегантное решение, то запросы надо посылать асинхронно:
- складывать запросы в очередь
- читать из очереди в одном потоке с учетом ограничения по частоте
или же залить запросы в Flowable и пропускать их через window, которое будет "выстреливать" по 60 запросов в минуту.