- access frequence limit

- output detail request when error
This commit is contained in:
gazebo
2018-10-27 10:10:54 +08:00
parent 56bea8ce11
commit ecb04fbe72
5 changed files with 121 additions and 14 deletions

View File

@@ -0,0 +1,33 @@
package platformapi
import (
"time"
"github.com/juju/ratelimit"
)
type LimiterConfig struct {
MaxAccessCount int
TimeGapInSecond int
}
type Limiter struct {
limitConfig map[string]*ratelimit.Bucket
}
func New(config map[string]*LimiterConfig) *Limiter {
limiter := &Limiter{
limitConfig: make(map[string]*ratelimit.Bucket),
}
for k, v := range config {
limiter.limitConfig[k] = ratelimit.NewBucketWithQuantum(time.Duration(v.TimeGapInSecond)*time.Second, int64(v.MaxAccessCount), int64(v.MaxAccessCount))
}
return limiter
}
func (l *Limiter) AccessAPI(apiName string) {
bucket := l.limitConfig[apiName]
if bucket != nil {
bucket.Wait(1)
}
}