Configuring Spring Retry Circuit Breakers

Spring Retry 为 Spring 应用程序提供声明性重试支持。该项目的一个子集包括实现熔断器功能的能力。Spring Retry 通过结合其 CircuitBreakerRetryPolicy and a stateful retry 提供熔断器实现。使用 Spring Retry 创建的所有熔断器将使用 CircuitBreakerRetryPolicyDefaultRetryState 创建。这两个类都可以使用 SpringRetryConfigBuilder 配置。

Default Configuration

要为所有熔断器提供默认配置,创建一个 Customizer bean,它传递一个 SpringRetryCircuitBreakerFactoryconfigureDefault 方法可用于提供默认配置。

@Bean
public Customizer<SpringRetryCircuitBreakerFactory> defaultCustomizer() {
	return factory -> factory.configureDefault(id -> new SpringRetryConfigBuilder(id)
    	.retryPolicy(new TimeoutRetryPolicy()).build());
}

Specific Circuit Breaker Configuration

与提供默认配置类似,你可以创建一个 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) {

		}
	}));
}