限流
2025/5/14大约 1 分钟componentratelimitadaptive
自适应限流使用示例
自适应限流是默认阈值与系统资源使用情况综合决定是否限流。由于不同服务器的处理能力不一样,在服务器比较多时候,参数不好设置,根据服务器处理能力自适应限流,避免了每个服务手动设置参数的麻烦。
点击查看 自适应限流使用示例。
配置指南
基础配置
在 sponge 创建的服务中,限流组件默认是关闭的。
在configs
目录下 yaml 文件设置字段enableLimit
:
app:
enableLimit: false # 是否开启自适应限流,true:开启, false:关闭
Web 服务配置
虽然有默认的阈值和系统资源配额,可以修改这些默认值。
对于web
服务,在internal/routers/routers.go
里的 RateLimit 修改默认值,示例:
// limit middleware
if config.Get().App.EnableLimit {
r.Use(middleware.RateLimit(
middleware.WithWindow(time.Second*5),
middleware.WithBucket(200),
middleware.WithCPUThreshold(600),
middleware.WithCPUQuota(0),
))
}
gRPC 服务配置
对于gRPC
服务,在internal/server/grpc.go
里的 UnaryServerRateLimit 修改默认值,示例:
// limit interceptor
if config.Get().App.EnableLimit {
unaryServerInterceptors = append(unaryServerInterceptors, interceptor.UnaryServerRateLimit(
interceptor.WithWindow(time.Second*5),
interceptor.WithBucket(200),
interceptor.WithCPUThreshold(600),
interceptor.WithCPUQuota(0),
))
}