如果想在Gin Web服务中实现限流功能,可以使用ulule/limiter,uber-go/ratelimit
1.ulule/limiter
ulule/limiter是一款支持分布式限流的框架,其可以在Redis中存储和共享限流状态,从而在分布式环境中实现一致的限流逻辑。
ulule/limiter基于令牌桶(Token Bucket)算法,因为允许累积令牌,若桶中有令牌,短时间可处理大量请求,所以可能会短时超限。令牌桶算法允许突发流量的业务,适用场景如 API 请求、流媒体加载。
其他基于令牌桶算法的限流框架还有 golang.org/x/time/rate
1.引用依赖
1 | go get github.com/ulule/limiter/v3@v3.11.2 |
ulule/limiter可以和gin web框架集成,实现服务接收外部请求场景下的限流,或者服务请求外部API场景下的限流
2.使用Gin限流中间件实现服务接收外部请求场景下的限流
参考:https://github.com/ulule/limiter-examples/blob/master/gin/main.go
1 | package middleware |
在router中使用限流中间件
1 | // ratelimit |