'Spring boot Circuit breaker - Resilience4 - Fallback method is getting triggered on 1st failure call itself

I have created a simple circuit breaker pattern using resilence4. The problem I am facing is, fallback method is getting called on 1st hit only. I am expecting fallback method to be called when at least 3 calls have failed in last 5 calls.

What am I missing in this setup? I feel yaml configs are not being applied.

My pom.xml

<dependency>

  <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>

</dependency>

<dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-aspects</artifactId>

</dependency>

Service.java

public class Service {

    @Value("${service2.url:http://localhost:6060/service2}")
    String serviceUrl;

    @CircuitBreaker(name = "myCircuitBreaker", fallbackMethod = "fallback")
    public String fetchData() {
        System.out.println(" Making a request to " + serviceUrl + " at :" + LocalDateTime.now());

        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.getForObject(serviceUrl, String.class);
    }

    public String fallback(Exception e) {
        return "fallback value";
    }
}

Contoller.java:

@RestController
public class Controller {

    @Autowired
    private Service service;

    @GetMapping("/")
    public String getValues() {
        return service.fetchData();
    }
}

application.yml:

 resilience4j:
  circuitbreaker:
    instances:
      myCircuitBreaker:
        registerHealthIndicator: true
        eventConsumerBufferSize: 10
        automaticTransitionFromOpenToHalfOpenEnabled: true
        failureRateThreshold: 50
        minimumNumberOfCalls: 5
        permittedNumberOfCallsInHalfOpenState: 3
        slidingWindowSize: 10
        waitDurationInOpenState: 5s
        slidingWindowType: COUNT_BASED


management:
  health:
    circuitbreakers:
      enabled: true
  endpoints:
    web:
      exposure:
        include: health
  endpoint:
    health:
      show-details: always


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source