Documentation
¶
Index ¶
- func ClearRules() error
- func LoadRules(rules []Rule) (bool, error)
- func RegisterStateChangeListeners(listeners ...StateChangeListener)
- func RemoveCircuitBreakerGenerator(s Strategy) error
- func SetCircuitBreakerGenerator(s Strategy, generator CircuitBreakerGenFunc) error
- type CircuitBreaker
- type CircuitBreakerGenFunc
- type MetricStatSlot
- type Rule
- type RuleBase
- type RuleOption
- func WithErrorCountThreshold(errorCountThreshold uint64) RuleOption
- func WithErrorRatioThreshold(errorRatioThreshold float64) RuleOption
- func WithMaxAllowedRtMs(maxAllowedRtMs uint64) RuleOption
- func WithMaxSlowRequestRatio(maxSlowRequestRatio float64) RuleOption
- func WithMinRequestAmount(minRequestAmount uint64) RuleOption
- func WithRetryTimeoutMs(retryTimeoutMs uint32) RuleOption
- func WithStatIntervalMs(statIntervalMs uint32) RuleOption
- type RuleOptions
- type Slot
- type State
- type StateChangeListener
- type Strategy
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func LoadRules ¶
LoadRules replaces old rules with the given circuit breaking rules.
return value:
bool: was designed to indicate whether the internal map has been changed error: was designed to indicate whether occurs the error.
func RegisterStateChangeListeners ¶
func RegisterStateChangeListeners(listeners ...StateChangeListener)
func SetCircuitBreakerGenerator ¶
func SetCircuitBreakerGenerator(s Strategy, generator CircuitBreakerGenFunc) error
SetCircuitBreakerGenerator sets the circuit breaker generator for the given strategy. Note that modifying the generator of default strategies is not allowed.
Types ¶
type CircuitBreaker ¶
type CircuitBreaker interface { // BoundRule returns the associated circuit breaking rule. BoundRule() Rule // BoundStat returns the associated statistic data structure. BoundStat() interface{} // TryPass acquires permission of an invocation only if it is available at the time of invocation. TryPass(ctx *base.EntryContext) bool // CurrentState returns current state of the circuit breaker. CurrentState() State // OnRequestComplete record a completed request with the given response time as well as error (if present), // and handle state transformation of the circuit breaker. OnRequestComplete(rtt uint64, err error) }
CircuitBreaker is the basic interface of circuit breaker
type CircuitBreakerGenFunc ¶
type CircuitBreakerGenFunc func(r Rule, reuseStat interface{}) CircuitBreaker
type MetricStatSlot ¶
type MetricStatSlot struct { }
MetricStatSlot records metrics for circuit breaker on invocation completed. MetricStatSlot must be filled into slot chain if circuit breaker is alive.
func (*MetricStatSlot) OnCompleted ¶
func (c *MetricStatSlot) OnCompleted(ctx *base.EntryContext)
func (*MetricStatSlot) OnEntryBlocked ¶
func (c *MetricStatSlot) OnEntryBlocked(_ *base.EntryContext, _ *base.BlockError)
func (*MetricStatSlot) OnEntryPassed ¶
func (c *MetricStatSlot) OnEntryPassed(_ *base.EntryContext)
type Rule ¶
type Rule interface { base.SentinelRule // BreakerStrategy returns the circuit breaker strategy. BreakerStrategy() Strategy // IsApplicable checks whether the rule is valid and could be converted to a corresponding circuit breaker. IsApplicable() error // BreakerStatIntervalMs returns the statistic interval of circuit breaker (in milliseconds). BreakerStatIntervalMs() uint32 // IsEqualsTo checks whether current rule is equal to the given rule. IsEqualsTo(r Rule) bool // IsStatReusable checks whether current rule is "statistically" equal to the given rule. IsStatReusable(r Rule) bool }
Rule is the base interface of the circuit breaker rule.
func GetResRules ¶
type RuleBase ¶
type RuleBase struct { // unique id Id string // resource name Resource string Strategy Strategy // RetryTimeoutMs represents recovery timeout (in milliseconds) before the circuit breaker opens. // During the open period, no requests are permitted until the timeout has elapsed. // After that, the circuit breaker will transform to half-open state for trying a few "trial" requests. RetryTimeoutMs uint32 // MinRequestAmount represents the minimum number of requests (in an active statistic time span) // that can trigger circuit breaking. MinRequestAmount uint64 // StatIntervalMs represents statistic time interval of the internal circuit breaker (in ms). StatIntervalMs uint32 }
RuleBase encompasses the common fields of circuit breaking rule.
func (*RuleBase) BreakerStatIntervalMs ¶
func (*RuleBase) BreakerStrategy ¶
func (*RuleBase) IsApplicable ¶
func (*RuleBase) IsStatReusable ¶
func (*RuleBase) ResourceName ¶
type RuleOption ¶ added in v0.5.0
type RuleOption func(opts *RuleOptions)
func WithErrorCountThreshold ¶ added in v0.5.0
func WithErrorCountThreshold(errorCountThreshold uint64) RuleOption
WithErrorCountThreshold sets the errorCountThreshold This function only takes effect for errorCountRule
func WithErrorRatioThreshold ¶ added in v0.5.0
func WithErrorRatioThreshold(errorRatioThreshold float64) RuleOption
WithErrorRatioThreshold sets the errorRatioThreshold This function only takes effect for errorRatioRule
func WithMaxAllowedRtMs ¶ added in v0.5.0
func WithMaxAllowedRtMs(maxAllowedRtMs uint64) RuleOption
WithMaxAllowedRtMs sets the maxAllowedRtMs This function only takes effect for slowRtRule
func WithMaxSlowRequestRatio ¶ added in v0.5.0
func WithMaxSlowRequestRatio(maxSlowRequestRatio float64) RuleOption
WithMaxSlowRequestRatio sets the maxSlowRequestRatio This function only takes effect for slowRtRule
func WithMinRequestAmount ¶ added in v0.5.0
func WithMinRequestAmount(minRequestAmount uint64) RuleOption
WithMinRequestAmount sets the minRequestAmount This function takes effect for all circuit breaker rule
func WithRetryTimeoutMs ¶ added in v0.5.0
func WithRetryTimeoutMs(retryTimeoutMs uint32) RuleOption
WithRetryTimeoutMs sets the retryTimeoutMs This function takes effect for all circuit breaker rule
func WithStatIntervalMs ¶ added in v0.5.0
func WithStatIntervalMs(statIntervalMs uint32) RuleOption
WithStatIntervalMs sets the statIntervalMs This function takes effect for all circuit breaker rule
type RuleOptions ¶ added in v0.5.0
type RuleOptions struct {
// contains filtered or unexported fields
}
type Slot ¶ added in v0.5.0
type Slot struct { }
func (*Slot) Check ¶ added in v0.5.0
func (b *Slot) Check(ctx *base.EntryContext) *base.TokenResult
type State ¶
type State int32
*
Circuit Breaker State Machine: switch to open based on rule +-----------------------------------------------------------------------+ | | | v
+----------------+ +----------------+ Probe +----------------+ | | | |<----------------| | | | Probe succeed | | | | | Closed |<------------------| HalfOpen | | Open | | | | | Probe failed | | | | | +---------------->| | +----------------+ +----------------+ +----------------+
type StateChangeListener ¶
type StateChangeListener interface { // OnTransformToClosed is triggered when circuit breaker state transformed to Closed. OnTransformToClosed(prev State, rule Rule) // OnTransformToOpen is triggered when circuit breaker state transformed to Open. // The "snapshot" indicates the triggered value when the transformation occurs. OnTransformToOpen(prev State, rule Rule, snapshot interface{}) // OnTransformToHalfOpen is triggered when circuit breaker state transformed to HalfOpen. OnTransformToHalfOpen(prev State, rule Rule) }
StateChangeListener listens on the circuit breaker state change event
type Strategy ¶
type Strategy int8
Strategy represents the strategy of circuit breaker. Each strategy is associated with one rule type.
const ( // SlowRequestRatio strategy changes the circuit breaker state based on slow request ratio SlowRequestRatio Strategy = iota // ErrorRatio strategy changes the circuit breaker state based on error request ratio ErrorRatio // ErrorCount strategy changes the circuit breaker state based on error amount ErrorCount )