配置 Spring Retry 断路器

Spring Retry 为 Spring 应用程序提供声明式重试支持。 该项目的子集包括实现断路器功能的能力。 Spring Retry 通过其CircuitBreakerRetryPolicy有状态重试的组合来提供断路器实现。 使用 Spring Retry 创建的所有断路器都将使用 the 和 DefaultRetryState 创建。 这两个类都可以使用 进行配置。CircuitBreakerRetryPolicySpringRetryConfigBuilderspring-doc.cn

默认配置

要为所有断路器提供默认配置,请创建一个 Bean,该 Bean 将 . 该方法可用于提供默认配置。CustomizerSpringRetryCircuitBreakerFactoryconfigureDefaultspring-doc.cn

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

特定断路器配置

与提供默认配置类似,您可以创建一个 bean,该 bean 将传递一个 .CustomizerSpringRetryCircuitBreakerFactoryspring-doc.cn

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

除了配置创建的断路器外,您还可以在创建断路器之后、将其返回给调用方之前自定义该断路器。 为此,您可以使用该方法。 这对于将事件处理程序添加到 .addRetryTemplateCustomizersRetryTemplatespring-doc.cn

@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) {

		}
	}));
}