This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
Files
schisandra-cloud-album/middleware/rate_limiter.go
2024-09-08 15:29:08 +08:00

23 lines
562 B
Go

package middleware
import (
ginI18n "github.com/gin-contrib/i18n"
"github.com/gin-gonic/gin"
"github.com/juju/ratelimit"
"schisandra-cloud-album/common/result"
"time"
)
func RateLimitMiddleware(fillInterval time.Duration, cap int64) func(c *gin.Context) {
bucket := ratelimit.NewBucket(fillInterval, cap)
return func(c *gin.Context) {
// 如果取不到令牌就中断本次请求返回 rate limit...
if bucket.TakeAvailable(1) < 1 {
result.FailWithMessage(ginI18n.MustGetMessage(c, "RequestLimit"), c)
c.Abort()
return
}
c.Next()
}
}