CircuitBreakerFilter
Monitors failures. When the number of failures reaches a configured failure threshold, the circuit breaker trips, and the circuit is considered open. Calls to downstream filters are stopped, and a runtime exception is returned.
After a configured delay, the circuit breaker is reset, and is the circuit considered closed. Calls to downstream filters are restored.
Usage
{
"name": string,
"type": "CircuitBreakerFilter",
"config": {
"maxFailures": configuration expression<integer>,
"openDuration": configuration expression<duration>,
"slidingCounter": object,
"openHandler": Handler reference,
"executor": ScheduledExecutorService reference
}
}
Properties
"maxFailures"
: configuration expression<number>, required-
The maximum number of failed requests allowed in the window given by
size
, before the circuit breaker trips. The value must be greater than zero. "openDuration"
: configuration expression<duration>, required-
The duration for which the circuit stays open after the circuit breaker trips. The
executor
schedules the circuit to be closed after this duration. "slidingCounter"
: object, required-
A sliding window error counter. The circuit breaker trips when the number of failed requests in the number of requests given by
size
reachesmaxFailures
.The following image illustrates how the sliding window counts failed requests:
{ "slidingCounter": { "size": configuration expression<number> } }
"size"
: configuration expression<number>, required-
The size of the sliding window in which to count errors.
The value of
size
must be greater than zero, and greater than the value ofmaxFailures
, otherwise an exception is thrown.
"openHandler"
: Handler reference, optional-
The Handler to call when the circuit is open.
Default: A handler that throws a RuntimeException with a "circuit-breaker open" message.
"executor"
: ScheduledExecutorService reference, optional-
A ScheduledExecutorService to schedule closure of the circuit after the duration given by
openDuration
.Default: The default ScheduledExecutorService in the heap
Example
In the following example, the circuit breaker opens after 11 failures in the previous 100 requests, throwing a runtime exception with a "circuit-breaker open" message. The default ScheduledExecutorService in the heap closes the circuit-breaker after 10 seconds.
{
"type": "CircuitBreakerFilter",
"config": {
"maxFailures": 10,
"openDuration": "10 seconds",
"openHandler": {
"type": "StaticResponseHandler",
"config": {
"status": 500,
"headers": {
"Content-Type": [ "text/plain" ]
},
"entity": "Too many failures; circuit opened to protect downstream services."
}
},
"slidingCounter": {
"size": 100
}
}
}