Kratos 限流器

2022-04-25 09:50 更新

限流器

限流器中間件,用于服務(wù)端流量控制,默認(rèn)使用bbr limiter算法。

配置

  • ?WithLimiter ?

替換默認(rèn)的限流算法

// WithLimiter set Limiter implementation,
// default is bbr limiter
func WithLimiter(limiter ratelimit.Limiter) Option {
    return func(o *options) {
        o.limiter = limiter
    }
}

所提供的限流器需要實(shí)現(xiàn) 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...)

觸發(fā)限流

當(dāng)觸發(fā)限流器時(shí),會(huì)直接拒絕當(dāng)前請(qǐng)求,并返回錯(cuò)誤?ErrLimitExceed?,定義如下:

// ErrLimitExceed is service unavailable due to rate limit exceeded.
var ErrLimitExceed = errors.New(429, "RATELIMIT", "service unavailable due to rate limit exceeded")


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)