微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

弹簧断路器-Resilience4j-如何配置?

如何解决弹簧断路器-Resilience4j-如何配置?

我对带有Resilience4J的Spring Cloud断路器(而不是单独使用Resilience4J)有一个快速的疑问。

两个项目都很棒。但是,目前,我们经常以失败告终而告终。这意味着,当第三方服务实际上还不错时,我们仍然会退后一步。

这可能是我自己的问题,因此,我想问一个关于特定配置的问题。

我想告诉当前的配置执行以下操作: 断路器。 (我将使用好,坏和半好/半坏状态。

  • 状态为好:在可配置的数字(例如,以5个为单位)失败的请求后(第三方API出了点问题),将状态改成好/半坏。

  • 当状态为好/坏为一半时:好/坏为一半,如果成功的请求中有一半以上(可配置)成功,则返回好状态。

  • 状态为好/半坏时:如果仍有一半以上的请求失败,则将状态设为坏。

  • 状态不佳时:连续两次发出良好请求后,将状态恢复为“好一半”。

  • 对于超时,请求应在4秒内回答。这是第三方给我们的SLA。除此之外,可能出了什么问题。

  • 对于每个失败的请求,重试3次(可配置)。

请问如何在Spring Webflux中实现这一目标?

谢谢

解决方法

这是不可能的:

状态不佳时:连续两次提出良好要求后,将状态恢复为“好一半”。

CircuitBreaker打开时,不允许任何呼叫。

如果使用resilience4j-spring-boot2resilience4j-reactor,则可以轻松实现这一目标。

publisher
.transform(TimeLimiterOperator.of(timeLimiter))
.transform(CircuitBreakerOperator.of(circuitBreaker))
.transform(RetryOperator.of(retry))

我们的Spring Boot启动程序允许您在外部配置文件中配置TimeLimiter,CircuitBreaker和Retry。您甚至可以在方法上使用注释。无需手动添加Reactor运算符。

    @TimeLimiter(name = "id")
    @CircuitBreaker(name = "id")
    @Retry(name = "id")
    public Flux<String> fluxSuccess() {
        return Flux.just("Hello","World");
    }

我们的Spring Boot启动器会添加指标;)

请参阅:https://resilience4j.readme.io/docs/getting-started-3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。