pkg/adapters/micro/options.go (73 lines of code) (raw):

package micro import ( "context" "github.com/micro/go-micro/v2/client" "github.com/micro/go-micro/v2/server" "github.com/alibaba/sentinel-golang/core/base" ) type ( Option func(*options) options struct { clientResourceExtract func(context.Context, client.Request) string serverResourceExtract func(context.Context, server.Request) string streamClientResourceExtract func(context.Context, client.Request) string streamServerResourceExtract func(server.Stream) string clientBlockFallback func(context.Context, client.Request, *base.BlockError) error serverBlockFallback func(context.Context, server.Request, *base.BlockError) error streamClientBlockFallback func(context.Context, client.Request, *base.BlockError) (client.Stream, error) streamServerBlockFallback func(server.Stream, *base.BlockError) server.Stream enableOutlier func(ctx context.Context) bool } ) // WithClientResourceExtractor sets the resource extractor of unary client request. // The second string parameter is the full method name of current invocation. func WithClientResourceExtractor(fn func(context.Context, client.Request) string) Option { return func(opts *options) { opts.clientResourceExtract = fn } } // WithServerResourceExtractor sets the resource extractor of unary server request. func WithServerResourceExtractor(fn func(context.Context, server.Request) string) Option { return func(opts *options) { opts.serverResourceExtract = fn } } // WithStreamClientResourceExtractor sets the resource extractor of stream client request. func WithStreamClientResourceExtractor(fn func(context.Context, client.Request) string) Option { return func(opts *options) { opts.streamClientResourceExtract = fn } } // WithStreamServerResourceExtractor sets the resource extractor of stream server request. func WithStreamServerResourceExtractor(fn func(server.Stream) string) Option { return func(opts *options) { opts.streamServerResourceExtract = fn } } // WithClientBlockFallback sets the block fallback handler of unary client request. // The second string parameter is the full method name of current invocation. func WithClientBlockFallback(fn func(context.Context, client.Request, *base.BlockError) error) Option { return func(opts *options) { opts.clientBlockFallback = fn } } // WithServerBlockFallback sets the block fallback handler of unary server request. func WithServerBlockFallback(fn func(context.Context, server.Request, *base.BlockError) error) Option { return func(opts *options) { opts.serverBlockFallback = fn } } // WithStreamClientBlockFallback sets the block fallback handler of stream client request. func WithStreamClientBlockFallback(fn func(context.Context, client.Request, *base.BlockError) (client.Stream, error)) Option { return func(opts *options) { opts.streamClientBlockFallback = fn } } // WithStreamServerBlockFallback sets the block fallback handler of stream server request. func WithStreamServerBlockFallback(fn func(server.Stream, *base.BlockError) server.Stream) Option { return func(opts *options) { opts.streamServerBlockFallback = fn } } // WithEnableOutlier sets whether to enable outlier ejection func WithEnableOutlier(fn func(ctx context.Context) bool) Option { return func(opts *options) { opts.enableOutlier = fn } } func evaluateOptions(opts []Option) *options { optCopy := &options{} for _, o := range opts { o(optCopy) } return optCopy }