1.1.0 • Published 6 years ago
@ricanontherun/circuit-breaker v1.1.0
Circuit Breaker
Conditionally call a function depending on the state of the circuit.
States
Closed (default state)
All calls are made. If an Error is thrown by the function, the circuit may open according to the following rule:
- If the number of
consecutivefailed calls (thrown Error) is greater than or equal to the configuredopenThreshold, the circuit willopen.
Open
No calls are made. Instead, a default error is thrown. Note: As soon as the circuit transitions into the open state, a timer is started which will automatically transition the circuit into the half open state after halfOpenTimeout milliseconds.
Half Open
A semipermeable state in which only halfOpenCallRate percentage of calls are made. The calls which are allowed to be made are observed, and the circuit will close or open depending on the following rules:
- If the number of
consecutivefailed calls (thrown Error) is greater than or equal to the configuredopenThreshold, the circuit willopen. - If the number of
consecutivesuccessful calls is greater than or equal to the configuredcloseThreshold, the circuit willclose.
Installation
npm i @ricanontherun/circuit-breakerExample Usage
import {CircuitBreaker} from '@ricanontherun/circuit-breaker';
const circuitBreaker = new CircuitBreaker(async () => {
callSomeDownstreamService(); // Might throw.
}, { // Options.
// Close the circuit after 10 consecutive successful calls (no throw)
closeThreshold: 10,
// Open the circuit (if closed/half-open) after 5 consecutive failed calls.
openThreshold: 5,
// Automatically transition from closed to half-open after 5 seconds.
halfOpenTimeout: 5000,
// When the circuit is half-open, only allow 80% of calls to be made.
halfOpenCallRate: 80.0,
});
await circuitBreaker.call();
await circuitBreaker.callOrDefault('default value if open');