public class ThresholdCircuitBreaker extends AbstractCircuitBreaker<Long>
A simple implementation of the Circuit Breaker pattern that opens if the requested increment amount is greater than a given threshold.
It contains an internal counter that starts in zero, and each call increments the counter by a given amount. If the threshold is zero, the circuit breaker will be in a permanent open state.
An example of use case could be a memory circuit breaker.
long threshold = 10L; ThresholdCircuitBreaker breaker = new ThresholdCircuitBreaker(10L); ... public void handleRequest(Request request) { long memoryUsed = estimateMemoryUsage(request); if (breaker.incrementAndCheckState(memoryUsed)) { // actually handle this request } else { // do something else, e.g. send an error code } }
#Thread safe#
AbstractCircuitBreaker.State
PROPERTY_NAME, state
Constructor and Description |
---|
ThresholdCircuitBreaker(long threshold)
Creates a new instance of
ThresholdCircuitBreaker and initializes the threshold. |
Modifier and Type | Method and Description |
---|---|
boolean |
checkState()
Checks the state of this circuit breaker and changes it if necessary.
|
void |
close()
Closes this circuit breaker.
|
long |
getThreshold()
Gets the threshold.
|
boolean |
incrementAndCheckState(Long increment)
Increments the monitored value and performs a check of the current state of this
circuit breaker.
|
addChangeListener, changeState, isClosed, isOpen, isOpen, open, removeChangeListener
public ThresholdCircuitBreaker(long threshold)
Creates a new instance of ThresholdCircuitBreaker
and initializes the threshold.
threshold
- the threshold.public long getThreshold()
public boolean checkState() throws CircuitBreakingException
CLOSED
; a value
of true typically means that the current operation can continue.checkState
in interface CircuitBreaker<Long>
checkState
in class AbstractCircuitBreaker<Long>
CircuitBreakingException
public void close()
Resets the internal counter back to its initial value (zero).
close
in interface CircuitBreaker<Long>
close
in class AbstractCircuitBreaker<Long>
public boolean incrementAndCheckState(Long increment) throws CircuitBreakingException
CircuitBreaker.checkState()
, but the monitored
value is incremented before the state check is performed.
If the threshold is zero, the circuit breaker will be in a permanent open state.
incrementAndCheckState
in interface CircuitBreaker<Long>
incrementAndCheckState
in class AbstractCircuitBreaker<Long>
increment
- value to increment in the monitored value of the circuit breakerCircuitBreakingException
Copyright © 2001–2017 The Apache Software Foundation. All rights reserved.