pkg/adapters/go-zero/routing_middleware.go (27 lines of code) (raw):

package go_zero /* This is an example based on go-zero routing middleware tempalte, which is generated by goctl via goctl api go -api xxx.api The xxx.api file defines routing middlewares by @server( middleware: SentinelRoute ) For more information, please refer to go-zero's documentation. */ import ( "net/http" sentinel "github.com/alibaba/sentinel-golang/api" "github.com/alibaba/sentinel-golang/core/base" ) type SentinelRouteMiddleware struct { } func NewSentinelRouteMiddleware() *SentinelRouteMiddleware { return &SentinelRouteMiddleware{} } func (m *SentinelRouteMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { resourceName := r.Method + ":" + r.URL.Path entry, blockErr := sentinel.Entry( resourceName, sentinel.WithResourceType(base.ResTypeWeb), sentinel.WithTrafficType(base.Inbound), ) if blockErr != nil { http.Error(w, "Blocked by Sentinel", http.StatusTooManyRequests) return } defer entry.Exit() next(w, r) } }