Spring 断路器 - Resilience4j - 如何配置?
Spring Circuit Breaker - Resilience4j - how to configure?
我有一个关于 Spring 带有 Resilience4J 的云断路器(不仅仅是 Resilience4J)的快速问题。
这两个项目都很棒。然而,目前,我们过于频繁地以回退结束。这意味着,当第 3 方服务实际上没问题时,我们最终还是会进行回退。
这可能是我自己的问题,因此,我想问一个特定配置的问题。
我想告诉当前配置执行以下操作:
断路器。 (我将使用好、坏和一半 good/half 坏状态。
状态好的时候:在一个可配置的数目(我们以5为例)失败请求后(3rd有问题API),放到一半good/half 不好。
当状态为一半时good/half 坏:一半good/bad,如果超过一半(可配置)的请求成功,则返回良好状态。
当状态为一半时good/half坏:如果超过一半的请求仍然失败,则进入坏状态。
状态不好时:连续两次好请求后,放回一半好一半坏。
对于超时,请求应在 4 秒内回复。这是第 3 方给我们的 SLA。以上,可能是哪里出了问题。
对于每个失败的请求,重试 3 次(可配置)。
请问如何在Spring Webflux中实现?
谢谢
这是不可能的:
When state is bad: After two consecutive good requests, put it back to half good half bad.
当断路器打开时,它不允许任何调用。
如果您使用 resilience4j-spring-boot2
和 resilience4j-reactor
,您可以轻松实现此目的。
publisher
.transform(TimeLimiterOperator.of(timeLimiter))
.transform(CircuitBreakerOperator.of(circuitBreaker))
.transform(RetryOperator.of(retry))
我们的 Spring 引导启动器允许您在外部配置文件中配置 TimeLimiter、CircuitBreaker 和 Retry。您甚至可以只在您的方法上使用注释。无需手动添加 Reactor 运算符。
@TimeLimiter(name = "id")
@CircuitBreaker(name = "id")
@Retry(name = "id")
public Flux<String> fluxSuccess() {
return Flux.just("Hello", "World");
}
我们的 Spring 引导启动程序添加了指标 ;)
我有一个关于 Spring 带有 Resilience4J 的云断路器(不仅仅是 Resilience4J)的快速问题。
这两个项目都很棒。然而,目前,我们过于频繁地以回退结束。这意味着,当第 3 方服务实际上没问题时,我们最终还是会进行回退。
这可能是我自己的问题,因此,我想问一个特定配置的问题。
我想告诉当前配置执行以下操作: 断路器。 (我将使用好、坏和一半 good/half 坏状态。
状态好的时候:在一个可配置的数目(我们以5为例)失败请求后(3rd有问题API),放到一半good/half 不好。
当状态为一半时good/half 坏:一半good/bad,如果超过一半(可配置)的请求成功,则返回良好状态。
当状态为一半时good/half坏:如果超过一半的请求仍然失败,则进入坏状态。
状态不好时:连续两次好请求后,放回一半好一半坏。
对于超时,请求应在 4 秒内回复。这是第 3 方给我们的 SLA。以上,可能是哪里出了问题。
对于每个失败的请求,重试 3 次(可配置)。
请问如何在Spring Webflux中实现?
谢谢
这是不可能的:
When state is bad: After two consecutive good requests, put it back to half good half bad.
当断路器打开时,它不允许任何调用。
如果您使用 resilience4j-spring-boot2
和 resilience4j-reactor
,您可以轻松实现此目的。
publisher
.transform(TimeLimiterOperator.of(timeLimiter))
.transform(CircuitBreakerOperator.of(circuitBreaker))
.transform(RetryOperator.of(retry))
我们的 Spring 引导启动器允许您在外部配置文件中配置 TimeLimiter、CircuitBreaker 和 Retry。您甚至可以只在您的方法上使用注释。无需手动添加 Reactor 运算符。
@TimeLimiter(name = "id")
@CircuitBreaker(name = "id")
@Retry(name = "id")
public Flux<String> fluxSuccess() {
return Flux.just("Hello", "World");
}
我们的 Spring 引导启动程序添加了指标 ;)