Compare commits
1 Commits
master
...
demo/gatek
| Author | SHA1 | Date |
|---|---|---|
|
|
639feedeee |
|
|
@ -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
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue