Search code examples
spring-bootresilience4j

Missing metrics when programmatically creating a circuitbreaker


I want to define a circuitbreak with a programming approach so I did:

@Configuration
public class MyCircuitBreakerConfig {

@Bean
public CircuitBreakerRegistry myRegistry() {
    CircuitBreakerRegistry registry = CircuitBreakerRegistry.ofDefaults();
    registry.circuitBreaker("mycircuit", circuitConfig());
    return registry;
}

Problem is that, even though it works correctly, I get the following in metrics:

"components" : {
"circuitBreakers" : {
  "status" : "UNKNOWN"
}

While, if I define it in my properties file:

resilience4j:
 circuitbreaker:
      configs:
        myconfig:
          ...
      instances:
       mycircuit:
          base-config: myconfig

I can see it. What could the problem be? I'm using the resilience4j-spring-boot2 dependency.


Solution

  • You must not create your own CircuitBreakerRegistry. The Spring Boot AutoConfiguration creates an instance which you should use. If you need it, just inject (autowire) the existing CircuitBreakerRegistry into your code.

    You can override the defaults as follows

    resilience4j.circuitbreaker:
        configs:
            default:
                slidingWindowSize: 100
                permittedNumberOfCallsInHalfOpenState: 10
                waitDurationInOpenState: 10000
                failureRateThreshold: 60
                eventConsumerBufferSize: 10