Documentation ¶
Index ¶
- Constants
- func GetAccessLogFilter() filter.Filter
- func GetActiveFilter() filter.Filter
- func GetExecuteLimitFilter() filter.Filter
- func GetFilter() filter.Filter
- func GetGenericFilter() filter.Filter
- func GetGenericServiceFilter() filter.Filter
- func GetHystrixFilterConsumer() filter.Filter
- func GetHystrixFilterProvider() filter.Filter
- func GetSentinelConsumerFilter() filter.Filter
- func GetSentinelProviderFilter() filter.Filter
- func GetTokenFilter() filter.Filter
- func GetTpsLimitFilter() filter.Filter
- func NewHystrixFilterError(err error, failByHystrix bool) error
- func SetDubboConsumerFallback(f DubboFallback)
- func SetDubboProviderFallback(f DubboFallback)
- type AccessLogData
- type AccessLogFilter
- type ActiveFilter
- type CommandConfigWithError
- type DubboFallback
- type DubboLoggerWrapper
- func (d DubboLoggerWrapper) Debug(msg string, keysAndValues ...interface{})
- func (d DubboLoggerWrapper) DebugEnabled() bool
- func (d DubboLoggerWrapper) Error(err error, msg string, keysAndValues ...interface{})
- func (d DubboLoggerWrapper) ErrorEnabled() bool
- func (d DubboLoggerWrapper) Info(msg string, keysAndValues ...interface{})
- func (d DubboLoggerWrapper) InfoEnabled() bool
- func (d DubboLoggerWrapper) Warn(msg string, keysAndValues ...interface{})
- func (d DubboLoggerWrapper) WarnEnabled() bool
- type EchoFilter
- type ExecuteLimitFilter
- type ExecuteState
- type GenericFilter
- type GenericServiceFilter
- type HystrixFilter
- type HystrixFilterConfig
- type HystrixFilterError
- type SeataFilter
- type SentinelConsumerFilter
- type SentinelProviderFilter
- type ServiceHystrixConfig
- type TokenFilter
- type TpsLimitFilter
Constants ¶
const ( // nolint FileDateFormat = "2006-01-02" // nolint MessageDateLayout = "2006-01-02 15:04:05" // nolint LogMaxBuffer = 5000 // nolint LogFileMode = 0o600 // nolint Types = "types" // nolint Arguments = "arguments" )
const ( // GENERIC_SERVICE defines the filter name GENERIC_SERVICE = "generic_service" // nolint GENERIC_SERIALIZATION_DEFAULT = "true" )
const ( // nolint HYSTRIX_CONSUMER = "hystrix_consumer" // nolint HYSTRIX_PROVIDER = "hystrix_provider" // nolint HYSTRIX = "hystrix" )
const ( SEATA = constant.DubboCtxKey("seata") SEATA_XID = constant.DubboCtxKey("SEATA_XID") )
const ( SentinelProviderFilterName = "sentinel-provider" SentinelConsumerFilterName = "sentinel-consumer" DefaultProviderPrefix = "dubbo:provider:" DefaultConsumerPrefix = "dubbo:consumer:" MethodEntryKey = constant.DubboCtxKey("$$sentinelMethodEntry") InterfaceEntryKey = constant.DubboCtxKey("$$sentinelInterfaceEntry") )
const (
// ECHO echo module name
ECHO = "echo"
)
const ( // GENERIC // generic module name GENERIC = "generic" )
const (
// nolint
TOKEN = "token"
)
const (
// TpsLimitFilterKey key
TpsLimitFilterKey = "tps"
)
Variables ¶
This section is empty.
Functions ¶
func GetAccessLogFilter ¶
GetAccessLogFilter return the instance of AccessLogFilter
func GetActiveFilter ¶
GetActiveFilter creates ActiveFilter instance
func GetExecuteLimitFilter ¶
GetExecuteLimitFilter returns the singleton ExecuteLimitFilter instance
func GetGenericFilter ¶
GetGenericFilter returns GenericFilter instance
func GetHystrixFilterConsumer ¶
GetHystrixFilterConsumer returns HystrixFilter instance for consumer
func GetHystrixFilterProvider ¶
GetHystrixFilterProvider returns HystrixFilter instance for provider
func GetTpsLimitFilter ¶
GetTpsLimitFilter returns an TpsLimitFilter instance.
func NewHystrixFilterError ¶
NewHystrixFilterError return a HystrixFilterError instance
func SetDubboConsumerFallback ¶
func SetDubboConsumerFallback(f DubboFallback)
func SetDubboProviderFallback ¶
func SetDubboProviderFallback(f DubboFallback)
Types ¶
type AccessLogData ¶
type AccessLogData struct {
// contains filtered or unexported fields
}
AccessLogData defines the data that will be log into file
type AccessLogFilter ¶
type AccessLogFilter struct {
// contains filtered or unexported fields
}
* AccessLogFilter * Although the access log filter is a default filter, * you should config "accesslog" in service's config to tell the filter where store the access log. * for example: * "UserProvider": * registry: "hangzhouzk" * protocol : "dubbo" * interface : "com.ikurento.user.UserProvider" * ... # other configuration * accesslog: "/your/path/to/store/the/log/", # it should be the path of file. * * the value of "accesslog" can be "true" or "default" too. * If the value is one of them, the access log will be record in log file which defined in log.yml * AccessLogFilter is designed to be singleton
func (*AccessLogFilter) Invoke ¶
func (ef *AccessLogFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
Invoke will check whether user wants to use this filter. If we find the value of key constant.ACCESS_LOG_KEY, we will log the invocation info
func (*AccessLogFilter) OnResponse ¶
func (ef *AccessLogFilter) OnResponse(_ context.Context, result protocol.Result, _ protocol.Invoker, _ protocol.Invocation) protocol.Result
OnResponse do nothing
type ActiveFilter ¶
type ActiveFilter struct{}
ActiveFilter tracks the requests status
func (*ActiveFilter) Invoke ¶
func (ef *ActiveFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
Invoke starts to record the requests status
func (*ActiveFilter) OnResponse ¶
func (ef *ActiveFilter) OnResponse(ctx context.Context, result protocol.Result, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
OnResponse update the active count base on the request result.
type CommandConfigWithError ¶
type CommandConfigWithError struct { Timeout int `yaml:"timeout"` MaxConcurrentRequests int `yaml:"max_concurrent_requests"` RequestVolumeThreshold int `yaml:"request_volume_threshold"` SleepWindow int `yaml:"sleep_window"` ErrorPercentThreshold int `yaml:"error_percent_threshold"` Error []string `yaml:"error_whitelist"` }
nolint
type DubboFallback ¶
type DubboFallback func(context.Context, protocol.Invoker, protocol.Invocation, *base.BlockError) protocol.Result
type DubboLoggerWrapper ¶
func (DubboLoggerWrapper) Debug ¶
func (d DubboLoggerWrapper) Debug(msg string, keysAndValues ...interface{})
func (DubboLoggerWrapper) DebugEnabled ¶
func (d DubboLoggerWrapper) DebugEnabled() bool
func (DubboLoggerWrapper) Error ¶
func (d DubboLoggerWrapper) Error(err error, msg string, keysAndValues ...interface{})
func (DubboLoggerWrapper) ErrorEnabled ¶
func (d DubboLoggerWrapper) ErrorEnabled() bool
func (DubboLoggerWrapper) Info ¶
func (d DubboLoggerWrapper) Info(msg string, keysAndValues ...interface{})
func (DubboLoggerWrapper) InfoEnabled ¶
func (d DubboLoggerWrapper) InfoEnabled() bool
func (DubboLoggerWrapper) Warn ¶
func (d DubboLoggerWrapper) Warn(msg string, keysAndValues ...interface{})
func (DubboLoggerWrapper) WarnEnabled ¶
func (d DubboLoggerWrapper) WarnEnabled() bool
type EchoFilter ¶
type EchoFilter struct{}
EchoFilter health check RPCService need a Echo method in consumer, if you want to use EchoFilter eg:
Echo func(ctx context.Context, arg interface{}, rsp *Xxx) error
func (*EchoFilter) Invoke ¶
func (ef *EchoFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
Invoke response to the callers with its first argument.
func (*EchoFilter) OnResponse ¶
func (ef *EchoFilter) OnResponse(_ context.Context, result protocol.Result, _ protocol.Invoker, _ protocol.Invocation) protocol.Result
OnResponse dummy process, returns the result directly
type ExecuteLimitFilter ¶
type ExecuteLimitFilter struct {
// contains filtered or unexported fields
}
ExecuteLimitFilter will limit the number of in-progress request and it's thread-safe. *
- example:
- "UserProvider":
- registry: "hangzhouzk"
- protocol : "dubbo"
- interface : "com.ikurento.user.UserProvider"
- ... # other configuration
- execute.limit: 200 # the name of MethodServiceTpsLimiterImpl. if the value < 0, invocation will be ignored.
- execute.limit.rejected.handle: "default" # the name of rejected handler
- methods:
- - name: "GetUser"
- execute.limit: 20, # in this case, this configuration in service-level will be ignored.
- - name: "UpdateUser"
- execute.limit: -1, # If the rate<0, the method will be ignored
- - name: "DeleteUser"
- execute.limit.rejected.handle: "customHandler" # Using the custom handler to do something when the request was rejected.
- - name: "AddUser"
- From the example, the configuration in service-level is 200, and the configuration of method GetUser is 20.
- it means that, the GetUser will be counted separately.
- The configuration of method UpdateUser is -1, so the invocation for it will not be counted.
- So the method DeleteUser and method AddUser will be limited by service-level configuration.
- Sometimes we want to do something, like log the request or return default value when the request is over limitation.
- Then you can implement the RejectedExecutionHandler interface and register it by invoking SetRejectedExecutionHandler.
func (*ExecuteLimitFilter) Invoke ¶
func (ef *ExecuteLimitFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
Invoke judges whether the current processing requests over the threshold
func (*ExecuteLimitFilter) OnResponse ¶
func (ef *ExecuteLimitFilter) OnResponse(_ context.Context, result protocol.Result, _ protocol.Invoker, _ protocol.Invocation) protocol.Result
OnResponse dummy process, returns the result directly
type ExecuteState ¶
type ExecuteState struct {
// contains filtered or unexported fields
}
ExecuteState defines the concurrent count
type GenericFilter ¶
type GenericFilter struct{}
nolint
func (*GenericFilter) Invoke ¶
func (ef *GenericFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
Invoke turns the parameters to map for generic method
func (*GenericFilter) OnResponse ¶
func (ef *GenericFilter) OnResponse(_ context.Context, result protocol.Result, _ protocol.Invoker, _ protocol.Invocation) protocol.Result
OnResponse dummy process, returns the result directly
type GenericServiceFilter ¶
type GenericServiceFilter struct{}
nolint
func (*GenericServiceFilter) Invoke ¶
func (ef *GenericServiceFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
Invoke is used to call service method by invocation
func (*GenericServiceFilter) OnResponse ¶
func (ef *GenericServiceFilter) OnResponse(ctx context.Context, result protocol.Result, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
nolint
type HystrixFilter ¶
type HystrixFilter struct { COrP bool // true for consumer // contains filtered or unexported fields }
*
- HystrixFilter
- You should add hystrix related configuration in provider or consumer config or both, according to which side you are to apply HystrixFilter.
- For example:
- filter_conf:
- hystrix:
- configs:
- # =========== Define config here ============
- "Default":
- timeout : 1000
- max_concurrent_requests : 25
- sleep_window : 5000
- error_percent_threshold : 50
- request_volume_threshold: 20
- "userp":
- timeout: 2000
- max_concurrent_requests: 512
- sleep_window: 4000
- error_percent_threshold: 35
- request_volume_threshold: 6
- "userp_m":
- timeout : 1200
- max_concurrent_requests : 512
- sleep_window : 6000
- error_percent_threshold : 60
- request_volume_threshold: 16
- # =========== Define error whitelist which will be ignored by Hystrix counter ============
- error_whitelist: [".*exception.*"] *
- # =========== Apply default config here ===========
- default: "Default" *
- services:
- "com.ikurento.user.UserProvider":
- # =========== Apply service level config ===========
- service_config: "userp"
- # =========== Apply method level config ===========
- methods:
- "GetUser": "userp_m"
- "GetUser1": "userp_m"
func (*HystrixFilter) Invoke ¶
func (hf *HystrixFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
Invoke is an implementation of filter, provides Hystrix pattern latency and fault tolerance
func (*HystrixFilter) OnResponse ¶
func (hf *HystrixFilter) OnResponse(ctx context.Context, result protocol.Result, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
OnResponse dummy process, returns the result directly
type HystrixFilterConfig ¶
type HystrixFilterConfig struct { Configs map[string]*CommandConfigWithError Default string Services map[string]ServiceHystrixConfig }
nolint
type HystrixFilterError ¶
type HystrixFilterError struct {
// contains filtered or unexported fields
}
HystrixFilterError implements error interface
func (*HystrixFilterError) Error ¶
func (hfError *HystrixFilterError) Error() string
func (*HystrixFilterError) FailByHystrix ¶
func (hfError *HystrixFilterError) FailByHystrix() bool
FailByHystrix returns whether the fails causing by Hystrix
type SeataFilter ¶
type SeataFilter struct{}
SeataFilter when use seata-golang, use this filter to transfer xid
func (*SeataFilter) Invoke ¶
func (sf *SeataFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
When use Seata, transfer xid by attachments Invoke Get Xid by attachment key `SEATA_XID`
func (*SeataFilter) OnResponse ¶
func (sf *SeataFilter) OnResponse(ctx context.Context, result protocol.Result, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
OnResponse dummy process, returns the result directly
type SentinelConsumerFilter ¶
type SentinelConsumerFilter struct{}
func (*SentinelConsumerFilter) Invoke ¶
func (d *SentinelConsumerFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
func (*SentinelConsumerFilter) OnResponse ¶
type SentinelProviderFilter ¶
type SentinelProviderFilter struct{}
func (*SentinelProviderFilter) Invoke ¶
func (d *SentinelProviderFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
func (*SentinelProviderFilter) OnResponse ¶
type ServiceHystrixConfig ¶
type ServiceHystrixConfig struct { ServiceConfig string `yaml:"service_config"` Methods map[string]string }
nolint
type TokenFilter ¶
type TokenFilter struct{}
TokenFilter will verify if the token is valid
func (*TokenFilter) Invoke ¶
func (tf *TokenFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
Invoke verifies the incoming token with the service configured token
func (*TokenFilter) OnResponse ¶
func (tf *TokenFilter) OnResponse(ctx context.Context, result protocol.Result, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
OnResponse dummy process, returns the result directly
type TpsLimitFilter ¶
type TpsLimitFilter struct{}
TpsLimitFilter filters the requests by TPS *
- if you wish to use the TpsLimiter, please add the configuration into your service provider configuration:
- for example:
- "UserProvider":
- registry: "hangzhouzk"
- protocol : "dubbo"
- interface : "com.ikurento.user.UserProvider"
- ... # other configuration
- tps.limiter: "method-service", # it should be the name of limiter. if the value is 'default',
- # the MethodServiceTpsLimiterImpl will be used.
- tps.limit.rejected.handler: "default", # optional, or the name of the implementation
- if the value of 'tps.limiter' is nil or empty string, the tps filter will do nothing
func (TpsLimitFilter) Invoke ¶
func (t TpsLimitFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result
Invoke gets the configured limter to impose TPS limiting
func (TpsLimitFilter) OnResponse ¶
func (t TpsLimitFilter) OnResponse(_ context.Context, result protocol.Result, _ protocol.Invoker, _ protocol.Invocation) protocol.Result
OnResponse dummy process, returns the result directly