限流器
限流器器中间件,用于服务端流量控制,默认使用bbr limiter算法。
配置
WithLimiter
替换默认的限流算法
// WithLimiter set Limiter implementation,
// default is bbr limiter
func WithLimiter(limiter ratelimit.Limiter) Option {
return func(o *options) {
o.limiter = limiter
}
}
所提供的限流器需要实现 aegis 的 Limiter 接口, 更多信息可以参考aegis/ratelimit
// Limiter is a rate limiter.
type Limiter interface {
Allow() (DoneFunc, error)
}
使用方法
在 Server 中配置使用限流器
var opts = []http.ServerOption{
http.Middleware(
ratelimit.Server(),
),
}
srv := http.NewServer(opts...)
触发限流
当触发限流器时,会直接拒绝当前请求,并返回错误ErrLimitExceed
,定义如下:
// ErrLimitExceed is service unavailable due to rate limit exceeded.
var ErrLimitExceed = errors.New(429, "RATELIMIT", "service unavailable due to rate limit exceeded")