全部產品
Search
文件中心

Alibaba Cloud SDK:重試策略配置

更新時間:Oct 16, 2025

本文將為您介紹在使用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包含AliyunExceptionIOException。當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次。