31 lines
721 B
Go
31 lines
721 B
Go
|
package middleware
|
||
|
|
||
|
import (
|
||
|
"github.com/alibaba/sentinel-golang/core/system"
|
||
|
sentinel "github.com/alibaba/sentinel-golang/pkg/adapters/gin"
|
||
|
"github.com/gin-gonic/gin"
|
||
|
|
||
|
log "github.com/go-admin-team/go-admin-core/logger"
|
||
|
)
|
||
|
|
||
|
// Sentinel 限流
|
||
|
func Sentinel() gin.HandlerFunc {
|
||
|
if _, err := system.LoadRules([]*system.Rule{
|
||
|
{
|
||
|
MetricType: system.InboundQPS,
|
||
|
TriggerCount: 200,
|
||
|
Strategy: system.BBR,
|
||
|
},
|
||
|
}); err != nil {
|
||
|
log.Fatalf("Unexpected error: %+v", err)
|
||
|
}
|
||
|
return sentinel.SentinelMiddleware(
|
||
|
sentinel.WithBlockFallback(func(ctx *gin.Context) {
|
||
|
ctx.AbortWithStatusJSON(200, map[string]interface{}{
|
||
|
"msg": "too many request; the quota used up!",
|
||
|
"code": 500,
|
||
|
})
|
||
|
}),
|
||
|
)
|
||
|
}
|