Configuring Spring Retry Circuit Breakers

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

Spring Retry provides declarative retry support for Spring applications. A subset of the project includes the ability to implement circuit breaker functionality. Spring Retry provides a circuit breaker implementation via a combination of it’s CircuitBreakerRetryPolicy and a stateful retry. All circuit breakers created using Spring Retry will be created using the CircuitBreakerRetryPolicy and a DefaultRetryState. Both of these classes can be configured using SpringRetryConfigBuilder.

Default Configuration

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

To provide a default configuration for all of your circuit breakers create a Customizer bean that is passed a SpringRetryCircuitBreakerFactory. The configureDefault method can be used to provide a default configuration.

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

Specific Circuit Breaker Configuration

与提供默认配置类似,你可以创建一个 Customizer bean,它传递一个 SpringRetryCircuitBreakerFactory

Similarly to providing a default configuration, you can create a Customizer bean this is passed a SpringRetryCircuitBreakerFactory.

@Bean
public Customizer<SpringRetryCircuitBreakerFactory> slowCustomizer() {
	return factory -> factory.configure(builder -> builder.retryPolicy(new SimpleRetryPolicy(1)).build(), "slow");
}

除了配置要创建的熔断器之外,你还可以自定义熔断器,使其在创建后但在返回给调用者之前执行。为此,你可以使用 addRetryTemplateCustomizers 方法。这对于向 RetryTemplate 添加事件处理很有用。

In addition to configuring the circuit breaker that is created you can also customize the circuit breaker after it has been created but before it is returned to the caller. To do this you can use the addRetryTemplateCustomizers method. This can be useful for adding event handlers to the 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) {

		}
	}));
}