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
状态是线程绑定的。
您需要编写自定义策略来维护全局状态。
我想使用 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
状态是线程绑定的。
您需要编写自定义策略来维护全局状态。