Spring CircuitBreakerRetryPolicy:为所有请求打开电路

Spring CircuitBreakerRetryPolicy: open the circuit for all requests

我想使用 Spring-Retry 实现断路器设计模式。我面临的主要问题是为所有请求打开电路。如果我从浏览器发出新请求,它仍然会不断重试。

我有一个 RetryTemplate 和一个 CircuitBreakerRetryPolicy 定义如下:

@Configuration
public class MyApplicationConfig {

    @Bean
    public RetryTemplate retryTemplate(RetryPolicy cbRetry) {
        RetryTemplate retryTemplate = new RetryTemplate();

        FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
        fixedBackOffPolicy.setBackOffPeriod(1000);

        retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
        retryTemplate.setRetryPolicy(circuitBreakerRetryPolicy);
        return retryTemplate;
    }

    @Bean("cbRetry")
    public RetryPolicy circuitBreaker() {
        CircuitBreakerRetryPolicy circuitBreakerRetryPolicy = new CircuitBreakerRetryPolicy();
        circuitBreakerRetryPolicy.setResetTimeout(20000);
        circuitBreakerRetryPolicy.setOpenTimeout(2000);
        return circuitBreakerRetryPolicy;
    }
}

然后我使用 RestTemplate 调用一个不存在的 url,只是为了使调用失败并计算重试次数。电路应该在 2 秒内打开,但如果我在第一个失败后立即尝试另一个调用,它会不断重试。

如何让电路在所有传入请求的给定 openTimeOut 时间段内保持打开状态?

我通过将它提供给 retryTemplate 调用来试验 RetryState,但这也无济于事。

谢谢!

spring-retry 状态是线程绑定的。

您需要编写自定义策略来维护全局状态。