弹簧断路器-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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...