限流器中间件,用于服务端流量控制,默认使用bbr limiter算法。
WithLimiter替换默认的限流算法
// WithLimiter set Limiter implementation,// default is bbr limiterfunc 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)}var opts = []http.ServerOption{ http.Middleware( // 默认 bbr limiter ratelimit.Server(), // 自定义 limiter //ratelimit.Server(ratelimit.WithLimiter(limiter)), ),}
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")