Resilience4j
https://github.com/spring-boot-tutorials/spring-cloud-circuitbreaker-resilience4j
In this article we will configure Resilience4j in Spring Boot.
Create Initial Code Base
Go to https://start.spring.io/
Add the following dependencies: - spring-cloud-starter-circuitbreaker-resilience4j - spring-boot-starter-web
Click
Generate
Dependencies
Dependencies used in pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Service
Create a new file src/main/java/com/example/circuitbreaker_resilience4j/DefaultService.java
:
@Service
public class DefaultService {
@Autowired
private CircuitBreakerFactory circuitBreakerFactory;
private final RestTemplate restTemplate = new RestTemplate();
public String getAlbumList() {
System.out.println("INSIDE getAlbumList()");
CircuitBreaker circuitBreaker = circuitBreakerFactory.create("circuitbreaker");
String url = "http://localhost:1234/not-real";
return circuitBreaker.run(
() -> restTemplate.getForObject(url, String.class),
throwable -> getFallbackAlbumList());
}
private String getFallbackAlbumList() {
System.out.println("INSIDE getFallbackAlbumList()");
CircuitBreaker circuitBreaker = circuitBreakerFactory.create("circuitbreaker");
String url = "https://jsonplaceholder.typicode.com/albums";
return circuitBreaker.run(() -> restTemplate.getForObject(url, String.class));
}
}
Main
Now let’s use this service.
Go back to MainApplication.java
and add the following:
@SpringBootApplication
public class CircuitbreakerResilience4jApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(CircuitbreakerResilience4jApplication.class, args);
}
@Autowired
private DefaultService defaultService;
@Override
public void run(String... args) throws Exception {
System.out.println(defaultService.getAlbumList().replace("\n", "").replace("\r", "").replaceAll("\\s+", ""));
}
}
Run Application
Open terminal at project root and execute the following:
mvn spring-boot:run
There should be no errors and the output will display all the CRUD operations.
Configuration (optional)
See: https://www.baeldung.com/spring-cloud-circuit-breaker#global-custom-configuration
@Configuration
public class DefaultConfiguration {
}