Documentation
¶
Index ¶
- func ClearRules() error
- func LoadRules(rules []Rule) (bool, error)
- func NewErrorCountRule(resource string, intervalMs uint32, retryTimeoutMs uint32, ...) *errorCountRule
- func NewErrorRatioRule(resource string, intervalMs uint32, retryTimeoutMs uint32, ...) *errorRatioRule
- func NewSlowRtRule(resource string, intervalMs uint32, retryTimeoutMs uint32, ...) *slowRtRule
- func RegisterStateChangeListeners(listeners ...StateChangeListener)
- func RemoveCircuitBreakerGenerator(s Strategy) error
- func SetCircuitBreakerGenerator(s Strategy, generator CircuitBreakerGenFunc) error
- type CircuitBreaker
- type CircuitBreakerGenFunc
- type CircuitBreakerSlot
- type MetricStatSlot
- type Rule
- type RuleBase
- 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 NewErrorCountRule ¶
func NewErrorRatioRule ¶
func NewSlowRtRule ¶
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) }
type CircuitBreakerGenFunc ¶
type CircuitBreakerGenFunc func(r Rule, reuseStat interface{}) CircuitBreaker
type CircuitBreakerSlot ¶
type CircuitBreakerSlot struct { }
func (*CircuitBreakerSlot) Check ¶
func (b *CircuitBreakerSlot) Check(ctx *base.EntryContext) *base.TokenResult
type MetricStatSlot ¶
type MetricStatSlot struct { }
MetricStatSlot records metrics for circuit breaker on invocation completed.
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 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 consistent with the given rule. IsEqualsTo(r Rule) bool // IsStatReusable checks whether current rule is "statistically" equal to the given rule. IsStatReusable(r Rule) bool }
Rule represents 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 seconds) 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 common fields of circuit breaking rule.
func (*RuleBase) BreakerStatIntervalMs ¶
func (*RuleBase) BreakerStrategy ¶
func (*RuleBase) IsApplicable ¶
func (*RuleBase) IsStatReusable ¶
func (*RuleBase) ResourceName ¶
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) }