codecamp

Kratos 限流器

限流器

限流器中间件,用于服务端流量控制,默认使用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")


Kratos 监控
Kratos 异常恢复
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Kratos 运维指南

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }