Resilient Architecture in Practice – Circuit Breakers for Java: Failsafe, Javaslang, Hystrix and Vert.xTuesday, February 14th, 2017
When dealing with remote services or APIs there is always the risk of latency issues, failures or connection losses. The worst thing to happen is when the remote service is down and our application hangs until the underlying protocol’s (e.g. TCP) connection timeout is reached and we’re receiving an exception. Until this moment is reached, our application might hang, memory is allocated for threads or bound objects and at last, our continuous requests might prevent the remote system from recovering.
We might use timeouts here but circuit-breakers take this approach one step further: A potential failing, critical or dangerous operation is encapsulated with a circuit breaker tracking failures and when a specified threshold is reached it tripping the breaker. Now all calls to the API fail immediately and the system does not even try to communicate with the failing remote system or the isolated API.
This avoids flooding a dead remote system with requests and allocating memory and system resources for waiting threads etc. and is also a good mechanism and integration point to track business-critical errors.
In the following tutorial I’m going to demonstrate four different circuit-breaker implementations for Java forced to interact with a failing API.