【发布时间】:2020-10-26 03:58:21
【问题描述】:
我正在使用 Resilience4j 断路器版本:'1.4.0 和 Spring Boot 版本 2.0.6,我的问题是 - 回退方法不起作用。该调用不会转到回退方法。 以下是我的代码:
@Override
@CircuitBreaker(name="mainService",fallbackMethod = "callFallback")
public JSONObject callService(JSONObject rawRequest) throws TimeoutException {
...
throw new TimeoutException("Time occured while calling
service");
...
}
-- 和后备方法:
private JSONObject callFallback(JSONObject rawRequest,Throwable t){
System.out.println("Inside fallback method callNsFallback,
cause"+t.toString());
logger.info("Inside fallback method callFallback,
cause - {}",t.toString());
return rawRequest;
}
--application.yml 中的配置
resilience4j:
circuitbreaker:
configs:
default:
registerHealthIndicator: true
ringBufferSizeInClosedState: 5
ringBufferSizeInHalfOpenState: 3
slidingWindowSize: 10
minimumNumberOfCalls: 5
permittedNumberOfCallsInHalfOpenState: 3
automaticTransitionFromOpenToHalfOpenEnabled: true
waitDurationInOpenState: 1s
failureRateThreshold: 50
eventConsumerBufferSize: 10
recordExceptions:
- java.util.concurrent.TimeoutException
instances:
mainService:
baseConfig: default
【问题讨论】:
-
如果没有回退方法,它会抛出 CallNotPermittedException 吗?
-
你只捕获 TimeoutException 吗?
-
感谢@SaifUrRahman 的回复。它没有抛出 CallNotPermittedException,我只使用了 TimeoutException。该问题通过添加带有resilience4J的'spring-aop'依赖来解决
-
好的。您能否分享您的 pom.xml 作为答案?
标签: spring spring-boot circuit-breaker resilience4j