- access frequence limit
- output detail request when error
This commit is contained in:
33
platformapi/limit_access_speed.go
Normal file
33
platformapi/limit_access_speed.go
Normal 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user