pkg/adapters/kitex/server.go (29 lines of code) (raw):

package kitex import ( "context" sentinel "github.com/alibaba/sentinel-golang/api" "github.com/alibaba/sentinel-golang/core/base" "github.com/cloudwego/kitex/pkg/endpoint" ) // SentinelServerMiddleware returns new server.Middleware // Default resource name is {service's name}:{method} // Default block fallback is returning blockError // Define your own behavior by setting serverOptions func SentinelServerMiddleware(opts ...Option) func(endpoint.Endpoint) endpoint.Endpoint { options := newOptions(opts) return func(next endpoint.Endpoint) endpoint.Endpoint { return func(ctx context.Context, req, resp interface{}) error { resourceName := options.ResourceExtract(ctx, req, resp) entry, blockErr := sentinel.Entry( resourceName, sentinel.WithResourceType(base.ResTypeRPC), sentinel.WithTrafficType(base.Inbound), ) if blockErr != nil { return options.BlockFallback(ctx, req, resp, blockErr) } defer entry.Exit() err := next(ctx, req, resp) if err != nil { sentinel.TraceError(entry, err) } return err } } }