【问题标题】:Unclear circuitbreak "fallback" behavior不明确的断路“回退”行为
【发布时间】:2020-06-23 09:54:30
【问题描述】:

我想在失败的情况下使用回退,所以在“打开”状态下的行为应该是调用回退而不是抛出异常。

问题是 在“关闭”状态期间调用了回退,而对于“打开”状态,我仍然得到异常。这是预期的行为吗?无法获得我正在寻找的东西?

我已经定义了我的自定义断路:

resilience4j:
  circuitbreaker:
 configs:
  default:
    register-health-indicator: true
    slidingWindowSize: 10
    minimumNumberOfCalls: 2
    permittedNumberOfCallsInHalfOpenState: 2
    automaticTransitionFromOpenToHalfOpenEnabled: true
    waitDurationInOpenState: 20s
    failureRateThreshold: 20
    slowCallDurationThreshold: 2s
    slowCallRateThreshold: 20
instances:
  backendA:
    base-config: default

现在,我将我的方法定义如下:

public class ExampleService {


@CircuitBreaker(name = "default", fallbackMethod = "fall")
public List<String> doSomething(Long id) {
    return Arrays.asList("a", "b", "c");

}

private List<String> fall(Long id, Exception ex) {
    return Arrays.asList("faaaallingggg");
}
 }

【问题讨论】:

    标签: spring-boot circuit-breaker resilience4j


    【解决方案1】:

    只需将回退方法的签名更改为

    private List<String> fall(Long id, CallNotPermittedException ex) {
        return Arrays.asList("faaaallingggg");
    }
    

    【讨论】:

    • 所以异常不能全部捕获?
    • 这就像一个 try/catch 块。如果你缩小范围,它会减少捕获量。如果您捕获 Exception,它会捕获所有内容,而不仅仅是 CallNotPermittedException。
    • 好的,但在我的情况下,我希望在 CallNotPermitted 扩展异常时也捕获它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2020-05-26
    • 2022-11-18
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多