What is Resilience4J
Resilience4j is a lightweight, easy-to-use fault tolerance library inspired by Netflix Hystrix. Resilience4j provides higher-order functions (decorators) to enhance any functional interface, lambda expression or method reference with a Circuit Breaker, Rate Limiter, Retry or Bulkhead. You can stack more than one decorator on any functional interface, lambda expression, or method reference. The advantage is that you have the choice to select the decorators you need and nothing else. With Resilience4j you don’t have to go all-in, you can pick what you need.
Automatically retry a failed operation
Limit how many times we call a remote operation in a certain period
Set a time limit for operation
Fail fast when the operation is continuously failing
Limit the number of concurrent operations
Caches the result of the operation
Enable an application to handle transient failures when it tries to connect to a service or network resource, by transparently retrying a failed operation. This can improve the stability of the application. For example, a database service that's processing a large number of concurrent requests can implement a throttling strategy that temporarily rejects any further requests until its workload has eased. An application trying to access the database might fail to connect, but if it tries again after a delay it might succeed.
How to use Resilience4J Retry
Add the following dependency:
Using default retry configuration:
By default, it will invoke the decorated function 3 times, retrying all the exceptions.
You can change this behavior by providing your custom configuration:
All the available configuration properties you can find here: https://resilience4j.readme.io/docs/retry
Integration with Spring Boot
Add the following spring boot starter:
Provide the configuration in application.yml
And finally, add the @Retry annotation to your retryable function:
As you can see it is also possible to specify a fallback method that will be triggered when all attempts have failed.
In this article, we learned what Resilience4j is and how we can use its retry module to make our applications resilient to temporary errors.