Documentation ¶
Overview ¶
Circuit breakers start in the Standby state first, observing responses and watching location metrics.
Once the Circuit breaker condition is met, it enters the "Tripped" state, where it activates fallback scenario for all requests during the FallbackDuration time period and reset the stats for the location.
After FallbackDuration time period passes, Circuit breaker enters "Recovering" state, during that state it will start passing some traffic back to the endpoints, increasing the amount of passed requests using linear function:
allowedRequestsRatio = 0.5 * (Now() - StartRecovery())/RecoveryDuration
Two scenarios are possible in the "Recovering" state: 1. Condition matches again, this will reset the state to "Tripped" and reset the timer. 2. Condition does not match, circuit breaker enters "Standby" state
It is possible to define actions (e.g. webhooks) of transitions between states:
* OnTripped action is called on transition (Standby -> Tripped) * OnStandby action is called on transition (Recovering -> Standby)
Index ¶
- type CircuitBreaker
- type CircuitBreakerOption
- func CheckPeriod(d time.Duration) CircuitBreakerOption
- func Clock(clock timetools.TimeProvider) CircuitBreakerOption
- func Fallback(h http.Handler) CircuitBreakerOption
- func FallbackDuration(d time.Duration) CircuitBreakerOption
- func Logger(l utils.Logger) CircuitBreakerOption
- func OnStandby(s SideEffect) CircuitBreakerOption
- func OnTripped(s SideEffect) CircuitBreakerOption
- func RecoveryDuration(d time.Duration) CircuitBreakerOption
- type Redirect
- type RedirectFallback
- type Response
- type ResponseFallback
- type SideEffect
- type Webhook
- type WebhookSideEffect
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CircuitBreaker ¶
type CircuitBreaker struct {
// contains filtered or unexported fields
}
CircuitBreaker is http.Handler that implements circuit breaker pattern
func New ¶
func New(next http.Handler, expression string, options ...CircuitBreakerOption) (*CircuitBreaker, error)
New creates a new CircuitBreaker middleware
func (*CircuitBreaker) ServeHTTP ¶
func (c *CircuitBreaker) ServeHTTP(w http.ResponseWriter, req *http.Request)
func (*CircuitBreaker) String ¶
func (c *CircuitBreaker) String() string
String returns log-friendly representation of the circuit breaker state
func (*CircuitBreaker) Wrap ¶
func (c *CircuitBreaker) Wrap(next http.Handler)
type CircuitBreakerOption ¶
type CircuitBreakerOption func(*CircuitBreaker) error
CircuitBreakerOption represents an option you can pass to New. See the documentation for the individual options below.
func CheckPeriod ¶
func CheckPeriod(d time.Duration) CircuitBreakerOption
CheckPeriod is how long the CircuitBreaker will wait between successive checks of the breaker condition.
func Clock ¶
func Clock(clock timetools.TimeProvider) CircuitBreakerOption
Clock allows you to fake che CircuitBreaker's view of the current time. Intended for unit tests.
func Fallback ¶
func Fallback(h http.Handler) CircuitBreakerOption
Fallback defines the http.Handler that the CircuitBreaker should route requests to when it prevents a request from taking its normal path.
func FallbackDuration ¶
func FallbackDuration(d time.Duration) CircuitBreakerOption
FallbackDuration is how long the CircuitBreaker will remain in the Tripped state before trying to recover.
func Logger ¶
func Logger(l utils.Logger) CircuitBreakerOption
Logger adds logging for the CircuitBreaker.
func OnStandby ¶
func OnStandby(s SideEffect) CircuitBreakerOption
OnTripped sets a SideEffect to run when entering the Standby state. Only one SideEffect can be set for this hook.
func OnTripped ¶
func OnTripped(s SideEffect) CircuitBreakerOption
OnTripped sets a SideEffect to run when entering the Tripped state. Only one SideEffect can be set for this hook.
func RecoveryDuration ¶
func RecoveryDuration(d time.Duration) CircuitBreakerOption
RecoveryDuration is how long the CircuitBreaker will take to ramp up requests during the Recovering state.
type RedirectFallback ¶
type RedirectFallback struct {
// contains filtered or unexported fields
}
func NewRedirectFallback ¶
func NewRedirectFallback(r Redirect) (*RedirectFallback, error)
func (*RedirectFallback) ServeHTTP ¶
func (f *RedirectFallback) ServeHTTP(w http.ResponseWriter, req *http.Request)
type ResponseFallback ¶
type ResponseFallback struct {
// contains filtered or unexported fields
}
func NewResponseFallback ¶
func NewResponseFallback(r Response) (*ResponseFallback, error)
func (*ResponseFallback) ServeHTTP ¶
func (f *ResponseFallback) ServeHTTP(w http.ResponseWriter, req *http.Request)
type SideEffect ¶
type SideEffect interface {
Exec() error
}
type WebhookSideEffect ¶
type WebhookSideEffect struct {
// contains filtered or unexported fields
}
func NewWebhookSideEffect ¶
func NewWebhookSideEffect(w Webhook) (*WebhookSideEffect, error)
func (*WebhookSideEffect) Exec ¶
func (w *WebhookSideEffect) Exec() error