30 lines
820 B
Go
30 lines
820 B
Go
package limit
|
||
|
||
import "context"
|
||
|
||
type LimitMethodConf interface {
|
||
// 获取需要限流的接口方法名
|
||
GetLimitMethods() map[string]struct{}
|
||
}
|
||
|
||
// 限流服务接口
|
||
type LimitService interface {
|
||
// 查询option值
|
||
GetOption() LimitOption
|
||
// 修改option结构体内的参数,支持实时更新
|
||
SetOption(option LimitOption)
|
||
// 直接消费,如果请求过于频繁,则直接拒绝,返回error
|
||
Consume() error
|
||
// 阻塞消费,如果请求过于频繁,通过ctx设置的Deadline或者Timeout来等待一段时间,若资源不够,亦返回error
|
||
ConsumeWithContext(ctx context.Context) error
|
||
// 克隆复制一个新的限流服务接口
|
||
Clone() LimitService
|
||
}
|
||
|
||
type LimitOption struct {
|
||
// 令牌发放的频率,单位毫秒
|
||
LimitMillisecond int64
|
||
// 每次发放的个数
|
||
Burst int
|
||
}
|