pkg/adapters/hertz/server.go (24 lines of code) (raw):
package hertz
import (
"context"
sentinel "github.com/alibaba/sentinel-golang/api"
"github.com/alibaba/sentinel-golang/core/base"
"github.com/cloudwego/hertz/pkg/app"
)
// SentinelServerMiddleware returns new app.HandlerFunc
// Default resource name is {method}:{path}, such as "GET:/api/users/:id"
// Default block fallback is returning 429 code
// Define your own behavior by setting serverOptions
func SentinelServerMiddleware(opts ...ServerOption) app.HandlerFunc {
options := newServerOptions(opts)
return func(c context.Context, ctx *app.RequestContext) {
resourceName := options.resourceExtract(c, ctx)
entry, err := sentinel.Entry(
resourceName,
sentinel.WithResourceType(base.ResTypeWeb),
sentinel.WithTrafficType(base.Inbound),
)
if err != nil {
options.blockFallback(c, ctx)
return
}
defer entry.Exit()
ctx.Next(c)
}
}