@@ -173,11 +173,11 @@ public class RetryGatewayFilterFactory extends AbstractGatewayFilterFactory<Retr
|
||||
}
|
||||
JitterConfig jitter = retryConfig.getJitter();
|
||||
if (jitter != null) {
|
||||
statusCodeRepeat = statusCodeRepeat.jitter(getJitter(jitter));
|
||||
exceptionRetry = exceptionRetry.jitter(getJitter(jitter));
|
||||
}
|
||||
Duration timeout = retryConfig.getTimeout();
|
||||
if (timeout != null) {
|
||||
statusCodeRepeat = statusCodeRepeat.timeout(timeout);
|
||||
exceptionRetry = exceptionRetry.timeout(timeout);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -357,6 +357,11 @@ public class RetryGatewayFilterFactory extends AbstractGatewayFilterFactory<Retr
|
||||
return this;
|
||||
}
|
||||
|
||||
public RetryConfig setJitter(double randomFactor) {
|
||||
this.jitter = new JitterConfig(randomFactor);
|
||||
return this;
|
||||
}
|
||||
|
||||
public BackoffConfig getBackoff() {
|
||||
return backoff;
|
||||
}
|
||||
|
||||
@@ -121,6 +121,17 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
@Test
|
||||
public void retryWithBackoffTimeout() {
|
||||
// backoff > timeout
|
||||
testClient.get()
|
||||
.uri("/retry?key=retry-with-backoff-timeout&count=3")
|
||||
.header(HttpHeaders.HOST, "www.retrywithbackofftimeout.org")
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void retryFilterGetJavaDsl() {
|
||||
testClient.get()
|
||||
@@ -375,6 +386,16 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest
|
||||
r -> r.host("**.retrywithbackoff.org").filters(f -> f.prefixPath("/httpbin").retry(config -> {
|
||||
config.setRetries(2).setBackoff(Duration.ofMillis(100), null, 2, true);
|
||||
})).uri(uri))
|
||||
.route("retry_with_backoff_jitter_timeout_test",
|
||||
r -> r.host("**.retrywithbackoffjittertimeout.org").filters(f -> f.prefixPath("/httpbin").retry(config -> {
|
||||
config.setRetries(3).setBackoff(Duration.ofMillis(50), Duration.ofMillis(100), 2, true)
|
||||
.setJitter(0.1).setTimeout(Duration.ofMillis(1000));
|
||||
})).uri(uri))
|
||||
.route("retry_with_backoff_timeout_test",
|
||||
r -> r.host("**.retrywithbackofftimeout.org").filters(f -> f.prefixPath("/httpbin").retry(config -> {
|
||||
config.setRetries(3).setBackoff(Duration.ofMillis(100), null, 2, true)
|
||||
.setTimeout(Duration.ofMillis(100));
|
||||
})).uri(uri))
|
||||
|
||||
.route("retry_with_loadbalancer",
|
||||
r -> r.host("**.retrywithloadbalancer.org")
|
||||
|
||||
@@ -29,22 +29,3 @@ spring:
|
||||
- name: Retry
|
||||
args:
|
||||
methods: GET,POST
|
||||
# =====================================
|
||||
- id: retry_with_backoff_jitter_timeout_test
|
||||
uri: ${test.uri}
|
||||
predicates:
|
||||
- Host=**.retrywithbackoffjittertimeout.org
|
||||
filters:
|
||||
- name: Retry
|
||||
args:
|
||||
retries: 3
|
||||
statuses: INTERNAL_SERVER_ERROR
|
||||
methods: GET
|
||||
backoff:
|
||||
firstBackoff: 10ms
|
||||
maxBackoff: 50ms
|
||||
factor: 2
|
||||
basedOnPreviousValue: false
|
||||
jitter:
|
||||
randomFactor: 0.5
|
||||
timeout: 200ms
|
||||
Reference in New Issue
Block a user