Rate limiter middleware for server-side traffic control, with bbr limiter algorithm implemented by default.
WithLimiterUsed to replace the default limiter algorithm
// WithLimiter set Limiter implementation,// default is bbr limiterfunc WithLimiter(limiter ratelimit.Limiter) Option { return func(o *options) { o.limiter = limiter }}The custom limiter needs to implement the Limiter interface of aegis/ratelimit.
// Limiter is a rate limiter.type Limiter interface { Allow() (DoneFunc, error)}var opts = []http.ServerOption{ http.Middleware( // default is bbr limiter ratelimit.Server(), // custom limiter //ratelimit.Server(ratelimit.WithLimiter(limiter)), ),}
srv := http.NewServer(opts...)When the rate limiter is triggered, the current request is rejected directly and error ErrLimitExceed will be returned, as defined below:
// ErrLimitExceed is service unavailable due to rate limit exceeded.var ErrLimitExceed = errors.New(429, "RATELIMIT", "service unavailable due to rate limit exceeded")