重试策略配置
更新时间:
本文将为您介绍在使用Java(异步)SDK过程中如何配置重试策略。
配置方式
可以在异步客户端中通过RetryPolicy配置重试策略。RetryPolicy支持设置退避策略、重试条件以及最大重试次数,示例代码如下:
AsyncClient client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
darabonba.core.client.ClientOverrideConfiguration.create()
// 设置重试策略
.setRetryPolicy(darabonba.core.policy.retry.RetryPolicy.builder()
.backoffStrategy(darabonba.core.policy.retry.backoff.BackoffStrategy.defaultStrategy())
.retryCondition(darabonba.core.policy.retry.conditions.RetryCondition.defaultRetryCondition())
.numRetries(3)
.build()
)
)
.build();参数说明
BackoffStrategy
退避策略,支持配置基础延迟(baseDelay)和最大重试延迟时间(maxBackoffTime)。您可以通过以下方式自定义BackoffStrategy:
darabonba.core.policy.retry.backoff.FullJitterBackoffStrategy.builder()
.baseDelay(java.time.Duration.ofMillis(100))
.maxBackoffTime(java.time.Duration.ofMillis(20000))
.build();baseDelay:基础延时,重试延时时间将根据baseDelay以指数级增长。默认值为100毫秒。
maxBackoffTime:最大重试延迟时间。当重试延时时间超过maxBackoffTime的设定值时,后续的重试延迟时间将固定为maxBackoffTime的值。默认值为20000毫秒。
RetryCondition
重试触发条件,支持两种类型:StatusCodeCondition和ExceptionsCondition。默认情况下,StatusCodeCondition包含408、429、500、502、503和504;ExceptionsCondition包含AliyunException和IOException。当StatusCodeCondition和ExceptionsCondition中的任意一个条件得到满足时,系统将触发重试。
您可以通过以下方式自定义重试触发条件:
所有条件都满足时触发重试。
darabonba.core.policy.retry.conditions.AndRetryCondition.create(RetryCondition... conditions)配置示例:
java.util.Set<Integer> statusCodeConditions = new java.util.HashSet<>(); statusCodeConditions.add(408); statusCodeConditions.add(429); statusCodeConditions.add(500); statusCodeConditions.add(502); statusCodeConditions.add(503); statusCodeConditions.add(504); darabonba.core.policy.retry.conditions.StatusCodeCondition statusCodeCondition = darabonba.core.policy.retry.conditions.StatusCodeCondition.create(statusCodeConditions); java.util.Set<Class<? extends Exception>> exceptionsConditions = new java.util.HashSet<>(); exceptionsConditions.add(com.aliyun.core.exception.AliyunException.class); exceptionsConditions.add(java.io.IOException.class); darabonba.core.policy.retry.conditions.ExceptionsCondition exceptionsCondition = darabonba.core.policy.retry.conditions.ExceptionsCondition.create(exceptionsConditions); darabonba.core.policy.retry.conditions.AndRetryCondition andRetryCondition = darabonba.core.policy.retry.conditions.AndRetryCondition.create(statusCodeCondition, exceptionsCondition);任意一个条件满足时触发重试。
darabonba.core.policy.retry.conditions.OrRetryCondition.create(RetryCondition... conditions)配置示例:
java.util.Set<Integer> statusCodeConditions = new java.util.HashSet<>(); statusCodeConditions.add(408); statusCodeConditions.add(429); statusCodeConditions.add(500); statusCodeConditions.add(502); statusCodeConditions.add(503); statusCodeConditions.add(504); darabonba.core.policy.retry.conditions.StatusCodeCondition statusCodeCondition = darabonba.core.policy.retry.conditions.StatusCodeCondition.create(statusCodeConditions); java.util.Set<Class<? extends Exception>> exceptionsConditions = java.util.new HashSet<>(); exceptionsConditions.add(com.aliyun.core.exception.AliyunException.class); exceptionsConditions.add(java.io.IOException.class); darabonba.core.policy.retry.conditions.ExceptionsCondition exceptionsCondition = darabonba.core.policy.retry.conditions.ExceptionsCondition.create(exceptionsConditions); darabonba.core.policy.retry.conditions.OrRetryCondition orRetryCondition = darabonba.core.policy.retry.conditions.OrRetryCondition.create(statusCodeCondition, exceptionsCondition);
numRetries
最大重试次数,默认值为3次。
该文章对您有帮助吗?