【问题标题】:Exception thrown from fallback not getting caught- Resilience4j回退引发的异常没有被捕获 - Resilience4j
【发布时间】:2022-06-14 11:16:25
【问题描述】:

我正在尝试通过替换 Hystrix 作为我的断路器来实现 Resilience4j。 快乐的路径工作得非常好,但是如果发生异常,代码会到达回退方法,但是当我从回退中重新抛出异常时,它永远不会被捕获。 有什么我想念的吗?

public CompletableFuture<String> fallBackMethod(Throwable e) {
        String exceptionMessage = "";
        if (e != null) {
            exceptionMessage = e.getMessage();
            LOG.error(" Inside Fallback. Could not reach remote service {}", exceptionMessage);
        }
        throw new RuntimeException();
    }

我希望它会被调用断路器的服务捕获,但每次它都会跳过 catch 块。

我是否可以从回退中重新抛出异常,或者甚至不可能?

谢谢

【问题讨论】:

  • @RobertWinkler,我遇到了同样的问题。你能帮忙吗? documentation 没有涉及这个用例,阅读 code 对我没有帮助,因为我不知道 AOP。谢谢!

标签: spring-boot resilience4j


【解决方案1】:

我和 OP 有同样的问题。不可能从回退中抛出任何东西,因为它(抛出的异常)甚至没有被考虑在内。

我最终做的是,回退将返回断路器的状态,如下所示:

io.github.resilience4j.circuitbreaker.CircuitBreaker circuitBreaker = circuitBreakerRegistry.circuitBreaker("cbName");
return circuitBreaker.getState().name(); //most of the time will be CLOSED, OPEN or HALF_OPEN

根据返回的值,我会相应地抛出一个异常。

【讨论】:

    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2013-08-08
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多