Senior
¿Cómo limitar la cantidad de llamadas al worker de sondeo si la API es de pago?
sobes.tech AI
Respuesta de la IA
Чтобы ограничить количество вызовов polling worker'а при работе с платным API, можно использовать несколько подходов:
-
Токен-бакет (Token Bucket) или Лимитатор (Rate Limiter)
- Хранить счётчик вызовов и время последнего сброса.
- Перед каждым вызовом проверять, не превышен ли лимит.
-
Планирование вызовов с задержками
- Использовать таймеры или sleep, чтобы между вызовами выдерживать необходимый интервал.
-
Хранение состояния в памяти или внешнем хранилище
- Если worker распределённый, состояние лимита нужно хранить в Redis или БД.
Пример на Go с простым rate limiter:
package main
import (
"fmt"
"time"
)
func main() {
maxCalls := 5
interval := time.Minute
calls := 0
resetTime := time.Now().Add(interval)
for {
now := time.Now()
if now.After(resetTime) {
calls = 0
resetTime = now.Add(interval)
}
if calls < maxCalls {
// Вызов API
fmt.Println("Calling API")
calls++
} else {
fmt.Println("Rate limit reached, waiting...")
time.Sleep(time.Until(resetTime))
continue
}
// Ждать между вызовами, если нужно
time.Sleep(10 * time.Second)
}
}
Такой подход позволяет контролировать количество запросов и не превышать лимиты платного API.