如何解决弹簧断路器-Resilience4j-如何配置?
我对带有Resilience4J的Spring Cloud断路器(而不是单独使用Resilience4J)有一个快速的疑问。
两个项目都很棒。但是,目前,我们经常以失败告终而告终。这意味着,当第三方服务实际上还不错时,我们仍然会退后一步。
这可能是我自己的问题,因此,我想问一个关于特定配置的问题。
我想告诉当前的配置执行以下操作: 断路器。 (我将使用好,坏和半好/半坏状态。
-
状态为好:在可配置的数字(例如,以5个为单位)失败的请求后(第三方API出了点问题),将状态改成好/半坏。
-
当状态为好/坏为一半时:好/坏为一半,如果成功的请求中有一半以上(可配置)成功,则返回好状态。
-
状态为好/半坏时:如果仍有一半以上的请求失败,则将状态设为坏。
-
状态不佳时:连续两次发出良好请求后,将状态恢复为“好一半”。
-
对于超时,请求应在4秒内回答。这是第三方给我们的SLA。除此之外,可能出了什么问题。
-
对于每个失败的请求,重试3次(可配置)。
请问如何在Spring Webflux中实现这一目标?
谢谢
解决方法
这是不可能的:
状态不佳时:连续两次提出良好要求后,将状态恢复为“好一半”。
CircuitBreaker打开时,不允许任何呼叫。
如果使用resilience4j-spring-boot2
和resilience4j-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启动器会添加指标;)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。