Senior
Tervezzen egy rate limitert egy külső API-hoz, 100 kérés/másodperc vagy perc limit mellett
sobes.tech MI
Válasz az MI-től
A Go nyelvben külső API-hoz rate limiter implementálásához, amely 100 kérést enged másodpercenként vagy percenként, használhatja a Token Bucket vagy Leaky Bucket algoritmust. Az egyik legegyszerűbb módszer a golang.org/x/time/rate könyvtár használata.
Példa 100 kérés/sec limittel:
package main
import (
"context"
"fmt"
"golang.org/x/time/rate"
"time"
)
func main() {
limiter := rate.NewLimiter(100, 100) // 100 kérés másodpercenként, 100 tokenes "kád"
for i := 0; i < 105; i++ {
if err := limiter.Wait(context.Background()); err != nil {
fmt.Println("Várakozási hiba:", err)
return
}
fmt.Printf("Kérelem %d elküldve %v\n", i+1, time.Now())
}
}
Percenkénti limit esetén létrehozhat egy limitert a 100/60 frekvenciával:
limiter := rate.NewLimiter(rate.Every(time.Minute/100), 100)
Főbb pontok:
rate.NewLimiterelfogadja a sebességet és a "kád" méretét.- A
Waitmetódus blokkolja a végrehajtást, amíg lehetőség nem adódik a kérés küldésére. - A nem-blokkoló
Allowmetódus segítségével ellenőrizhető a lehetőség anélkül, hogy várakozni kellene.
Ez a megközelítés rugalmasan szabályozza a külső API felé irányuló kérések sebességét.