demo: add rate limiter (for gatekeeper) #1

Open
recorder wants to merge 1 commits from demo/gatekeeper-req-changes into master
1 changed files with 23 additions and 0 deletions

View File

@ -0,0 +1,23 @@
package demo
import "time"
// RateLimiter 是一个最简限流器demo 用,故意不带测试以触发 gatekeeper 门禁)。
type RateLimiter struct {
interval time.Duration
last time.Time
}
func NewRateLimiter(qps int) *RateLimiter {
// 注意qps=0 会 panic除零属故意留下的缺陷供 gatekeeper 演示发现
return &RateLimiter{interval: time.Second / time.Duration(qps)}
}
func (r *RateLimiter) Allow() bool {
now := time.Now()
if now.Sub(r.last) >= r.interval {
r.last = now
return true
}
return false
}