gpt4 book ai didi

api - 使用 golang 服务器的第三方 API 的速率限制

转载 作者:行者123 更新时间:2023-12-05 03:25:33 26 4
gpt4 key购买 nike

您好,我有一个使用第三方 API 的带有 gorilla-mux 的 Go 后端。我有一些向此 API 发出请求的处理程序。我的限制是每秒 5 个请求。

我如何实现某种整体速率限制系统,其中请求排队并仅在容量可用时发送(或五个插槽中的一个是空闲的)?谢谢。

最佳答案

对于对第 3 方 API 的速率限制请求,您可以使用 Golang 库 golang.org/x/time/rate

示例用法

package main

import (
"context"
"log"
"net/http"
"time"

"golang.org/x/time/rate"
)

func main() {
rl := rate.NewLimiter(rate.Every(10*time.Second), 50)
reqURL := "https://www.google.com"
c := http.Client{}

req, err := http.NewRequest("GET", reqURL, nil)
if err != nil {
log.Fatal("failed to create request: %v", err)
}
for i := 0; i < 300; i++ {
// Waiting for rate limiter
err = rl.Wait(context.Background())
if err != nil {
log.Println("failed to wait: %v", err)
}
// and doing the requests if the rate is not exceeded
_, err := c.Do(req)
if err != nil {
log.Println("failed to wait: %v", err)
}
}
}

重要!!!这不是多个实例使用的解决方案!如果您要生成多个服务器,您应该考虑使用 Redis 来同步限制器 (https://github.com/go-redis/redis_rate)。

关于api - 使用 golang 服务器的第三方 API 的速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71977854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com