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);
}
}