Merge pull request #239 from ryanjbaxter/add-circuitbreakerretrypolicy-api

Add CircuitBreakerRetryPolicy API
This commit is contained in:
Ryan Baxter
2025-05-20 15:16:12 -04:00
committed by GitHub
2 changed files with 18 additions and 5 deletions

View File

@@ -70,6 +70,16 @@ public class SpringRetryConfigBuilder implements ConfigBuilder<SpringRetryConfig
return this;
}
/**
* Sets the {@link CircuitBreakerRetryPolicy} to use.
* @param retryPolicy The {@code CircuitBreakerRetryPolicy} to use.
* @return The builder.
*/
public SpringRetryConfigBuilder retryPolicy(CircuitBreakerRetryPolicy retryPolicy) {
this.retryPolicy = retryPolicy;
return this;
}
/**
* Forces a refresh on the {@link DefaultRetryState} object.
* @param refresh true to refresh, false otherwise.

View File

@@ -33,8 +33,8 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.retry.RetryCallback;
import org.springframework.retry.RetryContext;
import org.springframework.retry.RetryListener;
import org.springframework.retry.policy.CircuitBreakerRetryPolicy;
import org.springframework.retry.policy.SimpleRetryPolicy;
import org.springframework.retry.policy.TimeoutRetryPolicy;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -90,27 +90,30 @@ class SpringRetryCircuitBreakerIntegrationTest {
@Bean
Customizer<SpringRetryCircuitBreakerFactory> factoryCustomizer() {
return factory -> {
CircuitBreakerRetryPolicy circuitBreakerRetryPolicy = new CircuitBreakerRetryPolicy(new SimpleRetryPolicy(2));
circuitBreakerRetryPolicy.setOpenTimeout(1000);
circuitBreakerRetryPolicy.setResetTimeout(1000);
factory.configureDefault(
id -> new SpringRetryConfigBuilder(id).retryPolicy(new TimeoutRetryPolicy()).build());
id -> new SpringRetryConfigBuilder(id).retryPolicy(circuitBreakerRetryPolicy).build());
factory.configure(builder -> builder.retryPolicy(new SimpleRetryPolicy(1)).build(), "slow");
factory
.addRetryTemplateCustomizers(retryTemplate -> retryTemplate.registerListener(new RetryListener() {
@Override
public <T, E extends Throwable> boolean open(RetryContext context,
RetryCallback<T, E> callback) {
RetryCallback<T, E> callback) {
return false;
}
@Override
public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback,
Throwable throwable) {
Throwable throwable) {
}
@Override
public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback,
Throwable throwable) {
Throwable throwable) {
}
}));