1

I am trying to use @CircuitBreaker annotation in spring-mvc project but it does not seem to work. Does resilience4j-annotations work on a traditional non spring-boot setup?

@Bean
public CircuitBreaker edocCircuitBreaker() {
    LOGGER.info("Creating Circuit");
    CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
            .slowCallDurationThreshold(Duration.ofMillis(1000))
            .minimumNumberOfCalls(2)
            .slidingWindowSize(2)
            .failureRateThreshold(100)
            .build();
    CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.of(circuitBreakerConfig);
    CircuitBreaker serviceClientCircuitBreaker =  circuitBreakerRegistry.circuitBreaker("ClientCircuitBreaker");
    serviceClientCircuitBreaker.getEventPublisher().onStateTransition(this::serviceCircuitOpenHanlder);
    return serviceClientCircuitBreaker;
}



@CircuitBreaker(name="ClientCircuitBreaker")
public String sendAndReceive(String request, RequestParameters parameters) throws RuntimeException {

    StreamSource source = new StreamSource(new StringReader(request));
    StreamResult result = new StreamResult(new StringWriter());
    
    
    .....
    
    
flythru
  • 31
  • 4

1 Answers1

2

You should use resilience4j-spring. It provides a lot of @Configuration classes for you.

You need to import the Configuration classes:

@Import({ CircuitBreakerConfiguration.class, RetryConfiguration.class, TimeLimiterConfiguration.class, BulkheadConfiguration.class }

The CircuitBreakerConfiguration is important, because it configures the CircuitBreakerAspect bean which is needed so that annotations are working.

You have to create a @Bean which uses your external configuration properties file and fills and returns CircuitBreakerConfigurationProperties.

In resilience4j-spring-boot2 we configure it automatically with @EnableConfigurationProperties(CircuitBreakerProperties.class)

Robert Winkler
  • 1,734
  • 9
  • 8
  • I imported FallbackConfiguration and SpelResolverConfiguration on top of CircuitBreakerConfiguration in order to successfully load the spring context. However, the CircuitBreakerAspect.circuitBreakerAroundAdvice was not entertained when calling @CircuitBreaker annotated bean method. What am I doing wrong? This is my setup: https://stackoverflow.com/questions/70810306/how-to-run-the-springboottest-with-only-a-single-bean-and-with-included-resilien – miro Feb 01 '22 at 19:15