設定 Spring Retry 斷路器
Spring Retry 為 Spring 應用程式提供宣告式重試支援。此專案的子集包含實作斷路器功能的能力。Spring Retry 透過結合其 CircuitBreakerRetryPolicy
和 具狀態重試 來提供斷路器實作。所有使用 Spring Retry 建立的斷路器都將使用 CircuitBreakerRetryPolicy
和 DefaultRetryState
建立。這兩個類別都可以使用 SpringRetryConfigBuilder
進行組態。
預設組態
若要為所有斷路器提供預設組態,請建立一個傳遞 SpringRetryCircuitBreakerFactory
的 Customizer
Bean。configureDefault
方法可用於提供預設組態。
@Bean
public Customizer<SpringRetryCircuitBreakerFactory> defaultCustomizer() {
return factory -> factory.configureDefault(id -> new SpringRetryConfigBuilder(id)
.retryPolicy(new TimeoutRetryPolicy()).build());
}
特定斷路器組態
與提供預設組態類似,您可以建立一個傳遞 SpringRetryCircuitBreakerFactory
的 Customizer
Bean。
@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) {
}
}));
}