Sobes.tech
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, можно использовать несколько подходов:

  1. Токен-бакет (Token Bucket) или Лимитатор (Rate Limiter)

    • Хранить счётчик вызовов и время последнего сброса.
    • Перед каждым вызовом проверять, не превышен ли лимит.
  2. Планирование вызовов с задержками

    • Использовать таймеры или sleep, чтобы между вызовами выдерживать необходимый интервал.
  3. Хранение состояния в памяти или внешнем хранилище

    • Если 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.