对于最新的稳定版本,请使用 Spring-Cloud-CircuitBreaker 3.3.0! |
配置弹簧重试断路器
Spring Retry 为 Spring 应用程序提供声明式重试支持。
该项目的一个子集包括实现断路器功能的能力。
Spring Retry 通过其组合提供断路器实现CircuitBreakerRetryPolicy
以及有状态重试。
使用 Spring Retry 创建的所有断路器都将使用CircuitBreakerRetryPolicy
和DefaultRetryState
.
这两个类都可以使用SpringRetryConfigBuilder
.
默认配置
要为所有断路器提供默认配置,请创建一个Customizer
将SpringRetryCircuitBreakerFactory
.
这configureDefault
方法可用于提供默认配置。
@Bean
public Customizer<SpringRetryCircuitBreakerFactory> defaultCustomizer() {
return factory -> factory.configureDefault(id -> new SpringRetryConfigBuilder(id)
.retryPolicy(new TimeoutRetryPolicy()).build());
}
特定断路器配置
与提供默认配置类似,您可以创建一个Customizer
bean 这被传递了一个SpringRetryCircuitBreakerFactory
.
@Bean
public Customizer<SpringRetryCircuitBreakerFactory> slowCustomizer() {
return factory -> factory.configure(builder -> builder.retryPolicy(new SimpleRetryPolicy(1)).build(), "slow");
}
除了配置创建的断路器外,您还可以在断路器创建后、在将断路器返回给调用方之前自定义断路器。
为此,您可以使用addRetryTemplateCustomizers
方法。
这对于将事件处理程序添加到RetryTemplate
.
@Bean
public Customizer<SpringRetryCircuitBreakerFactory> slowCustomizer() {
return factory -> factory.addRetryTemplateCustomizers(retryTemplate -> retryTemplate.registerListener(new RetryListener() {
@Override
public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
return false;
}
@Override
public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
}
@Override
public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
}
}));
}