0

I am usin Spring Cloud Circuit Breaker Timelimiter with Spring 2.7.10 and Java 8. Problem is that fallback is called (or No fallback available) instantly and circuitbreaker.run never goes to the called method. What could be the problem? Sorry for not providing the full code, it is restricted!

Timelimiter configuration

@Configuration
  public class TimeoutConfig {

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> specificCustomConfiguration1() {
    TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
            .timeoutDuration(Duration.ofSeconds(5))
            .build();

    return factory -> factory.configure(builder -> builder
            .timeLimiterConfig(timeLimiterConfig).build(),"serviceTimeout");
}

}

A Timelimiter service

@Service
public class TimeoutService {

    @Autowired
    ErrorMapper errorMapper;
    @Autowired GetServices getServices;
    @Autowired
    private CircuitBreakerFactory circuitBreakerFactory;


    public GetServicesResponse runTimeout(GetServicesRequest request) {
            CircuitBreaker circuitBreaker = circuitBreakerFactory.create("serviceTimeout");
            return circuitBreaker.run(()->getServices.handle(request));
    }
}

Controller method, where Timelimiter is called

@Override
public GetServicesResponse getServices(GetServicesRequest request) {
    try {
        return timeoutService.runTimeout(request);
    } catch (Exception e) {
        return errorMapper.exceptionToResponse(request, e, GetServicesResponse.class);
    }
}
  • I'd guess (without seeing more code or data) that your timeout service trips the circuit breaker and thus immediately returns. Your setup seems to use a central circuit breaker "serviceTimeout" for all services that are called via `getServices.handle(request)` so if any of those fails or times out it will impact the others. – Thomas Apr 05 '23 at 07:18

0 Answers0