:::info 支持。 :::

默认已开启

  1. // see internal/router/router.go
  2. ...
  3. mux, err := core.New(logger,
  4. ...
  5. core.WithEnableRate(),
  6. ...
  7. )
  8. // 默认设置 core.WithEnableRate() 表示已设置限流。
  9. // 如果不写这一行,表示不设置限流。

限流代码片段

  1. // see internal/pkg/core/core.go
  2. ...
  3. limiter := rate.NewLimiter(rate.Every(time.Second*1), configs.MaxRequestsPerSecond)
  4. mux.engine.Use(func(ctx *gin.Context) {
  5. context := newContext(ctx)
  6. defer releaseContext(context)
  7. if !limiter.Allow() {
  8. context.AbortWithError(errno.NewError(
  9. http.StatusTooManyRequests,
  10. code.TooManyRequests,
  11. code.Text(code.TooManyRequests)),
  12. )
  13. return
  14. }
  15. ctx.Next()
  16. })

限流器