Files
baseapi/platformapi/limit_access_speed.go
gazebo ecb04fbe72 - access frequence limit
- output detail request when error
2018-10-27 10:10:54 +08:00

34 lines
667 B
Go

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)
}
}