Rate Limiter

Rate Limiter

Rate limiter middleware for server-side traffic control, with bbr limiter algorithm implemented by default.

Configuration

WithLimiter

Used to replace the default limiter algorithm

// WithLimiter set Limiter implementation,
// default is bbr limiter
func 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)
}

Usage

Use rate limiter in Server

var opts = []http.ServerOption{
    http.Middleware(
        // default is bbr limiter
        ratelimit.Server(),
        // custom limiter
        //ratelimit.Server(ratelimit.WithLimiter(limiter)),
    ),
}

srv := http.NewServer(opts...)

Trigger rate limiter

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")