首页 > 解决方案 > Resilience4j.retry 异常不工作

问题描述

我正在使用弹性4j.retry弹性4j .断路器。Service1正在调用另一个Service2可能引发异常的服务。即使我遇到异常,我也应该尝试连接至少定义的次数waitDuration * maxRetryAttempts

服务 1 ---> 调用 ---> 服务 2

应用程序.yml

resilience4j.retry:
  instances:
    service1:
      maxRetryAttempts: 4
      waitDuration: 1000 #ms
      retryExceptions:  
        - org.apache.http.conn.HttpHostConnectException
        - org.apache.thrift.TException
        - java.net.ConnectException

Service1Repository.java

Service2Response response = CircuitBreaker.decorateSupplier(circuitBreaker,
                                    Retry.decorateSupplier(retry, () -> {
                                        try {
                                            return service2.getdata(params);
                                        } catch (TException e) {
                                            log.error("msg", e);
                                            throw new Service1Exception("msg", e);
                                        }
                                    })
                            ).get();

但是,当Service2它关闭时,它不会重试(最多 4 次,每次应该在 1000 毫秒后发生)我会null立即得到响应(在我的情况下)。我尝试增加值(10000ms),还是一样。我看到打印了日志,但服务应该等待waitDuration * maxRetryAttempts是否Serviece2关闭。

标签: javarestcircuit-breakerretry-logicresilience4j

解决方案


如果要捕获已检查的异常,则必须使用decorateCallable.


推荐阅读