与@CircuitBreaker 一起使用时,@Recover(回退方法)不会被调用,一旦所有重试都用尽

阿尔纳夫卡福玛

尽管使用其他返回类型 Spring 重试回退机制似乎工作正常,但是在调用返回类型为 void 的 API 时。Recover 方法根本没有被调用,我已经尝试了所有可能类型的方法参数并更改了回退方法的返回类型.... 有没有办法做到这一点?我不明白为什么@CircuitBReaker 注释没有参数来将后备方法名称作为值传递给它?

    @CircuitBreaker(maxAttempts = 3, openTimeout = 8000, resetTimeout = 15000)
    public Void callingXYZ(final Abc abc, final Cdf cdf) {
        return retryTemplate.execute(context -> {
            log.info("Retry count={} when calling ******", context.getRetryCount());
            AbcServiceImpl.this.update*****Settings(OrgId.fromString(abc.getUUID(), cdf.getData());
            return null;
        });
    }

   //Recover method that should get invoked
    @Recover
    public Void fallbackUpdate*****(Throwable e, Abc abc) throws Throwable{
        log.info("Inside fallback");
        if (e instanceof ClientException) {
            log.warn("Fallback method is called when trying to call ******** from ****** because of {}", e.getCause());

   //Rollback in the db based on the method attributes
            throw SpecificException.forTask(HttpStatus.SERVICE_UNAVAILABLE.value(),
                    Enum.NAME.getErrorCode(),
                    Enum.NAME.getMEssage(), true);
        }
        throw e;
    } 

阿尔纳夫卡福玛

我在我的代码中解决了这个问题,它与 spring-retry 项目无关。由于我对 AOP 的 Spring 实现缺乏了解,我无法找到问题的解决方案。由于 Spring 的方面应用于围绕 bean 的代理而不是实际类,因此如果从同一类/服务调用带有 @circuitbreaker 的方法将不起作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

春季重试-@Circuitbreaker未重试

Spring Cloud配置假装回退(CircuitBreaker)规则

如何为使用@Circuitbreaker注释的方法创建单元测试

Resiliency4j CircuitBreaker 尝试在 AOP 中调用 CircuitBreaker 逻辑,以实现在配置中禁用时不调用断路器

Spring Cloud Resilience4j Circuitbreaker不调用回退

在Polly CircuitBreaker中设置durationBreak

resilience4j + CircuitBreaker的Spring实例

与AngularJS一起使用时href不会被渲染

是否可以订阅Hystrix中的CircuitBreaker开幕活动?

一旦所有消息都用完了,如何关闭kafka用户?

一旦我的应用通过了Gatekeeper,所有以后的下载都不会被隔离

spring application.properties中的resilience4j.circuitbreaker.configs与resilience4j.circuitbreaker.backends之间的区别是什么

引起原因:java.lang.ClassNotFoundException:io.github.resilience4j.circuitbreaker.CircuitBreakerOpenException

等到所有ajax调用完成都无法与$ .when一起使用时

一旦所有http调用结束了角度,就计算总数

将Firebase与Push框架一起使用时,不会调用didReceiveRemoteNotification

将完成处理程序汇集在一起,以便一旦执行多个闭包,方法就完成

一旦目录中的所有所有文件都已处理完毕,Camel Spring DSL就在bean上调用方法

与 AngularJS 一起使用时,Selectpicker 不会填充

将Avahi ServiceBrowser与(PyQt5)QtDbus和连接的插槽一起使用不会被调用

当与DataBinding一起使用时,LiveData不会通知UI有关更改的信息

一旦加载,vim会对所有文件类型使用相同的ftplugin

与 Alamofire 一起使用时未调用 cellForRowAtIndexPath

在将模拟验证与断言库一起使用时,检查所有断言和验证

将flex列与div一起使用时会占用所有剩余空间

“方法'where'在null上调用。” 当将流构建器与Firestore抖动一起使用时

将MSAL AngularJS与Azure B2C一起使用时不会调用tokenReceivedCallback

在 Kafka 消费者中所有先前的重试都用尽后,如何在固定的时间内重试?

与TypeApplications一起使用时,AllowAmbiguousTypes有多危险?