我对带有Resilience4J的Spring Cloud断路器(而不是单独使用Resilience4J)有一个快速的疑问。
两个项目都很棒。但是,目前,我们经常以失败告终而告终。这意味着,当第三方服务实际上还不错时,我们仍然会退后一步。
这可能是我自己的问题,因此,我想问一个关于特定配置的问题。
我想告诉当前的配置执行以下操作: 断路器。 (我将使用好,坏和半好/半坏状态。
状态为好:在可配置的数字(例如,以5个为单位)失败的请求后(第三方API出了点问题),将状态改成好/半坏。
当状态为好/坏为一半时:好/坏为一半,如果成功的请求中有一半以上(可配置)成功,则返回好状态。
状态为好/半坏时:如果仍有一半以上的请求失败,则将状态设为坏。
状态不佳时:连续两次发出良好请求后,将状态恢复为“好一半”。
对于超时,请求应在4秒内回答。这是第三方给我们的SLA。除此之外,可能出了什么问题。
对于每个失败的请求,重试3次(可配置)。
请问如何在Spring Webflux中实现这一目标?
谢谢
答案 0 :(得分:2)
这是不可能的:
状态不佳时:连续两次提出良好要求后,将状态恢复为“好一半”。
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启动器会添加指标;)