All Products
Search
Document Center

Alibaba Cloud SDK:Retry policy configuration

Last Updated:Oct 15, 2025

This topic describes how to configure a retry policy when you use the Java asynchronous SDK.

Configuration

You can configure a retry policy in the asynchronous client using `RetryPolicy`. `RetryPolicy` lets you set a backoff strategy, retry conditions, and the maximum number of retries. The following code provides an example:

AsyncClient client = AsyncClient.builder()
        .credentialsProvider(provider)
        .overrideConfiguration(
                darabonba.core.client.ClientOverrideConfiguration.create()
                        // Set the retry policy
                        .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();

Parameters

BackoffStrategy

The backoff strategy supports the configuration of a base delay (`baseDelay`) and a maximum backoff time (`maxBackoffTime`). You can customize `BackoffStrategy` as follows:

darabonba.core.policy.retry.backoff.FullJitterBackoffStrategy.builder()
        .baseDelay(java.time.Duration.ofMillis(100))
        .maxBackoffTime(java.time.Duration.ofMillis(20000))
        .build();
  • `baseDelay`: The base delay. The retry delay increases exponentially based on this value. The default value is 100 ms.

  • `maxBackoffTime`: The maximum retry delay. If the retry delay exceeds the `maxBackoffTime` value, subsequent retry delays are capped at the `maxBackoffTime` value. The default value is 20,000 ms.

RetryCondition

`RetryCondition` specifies the condition that triggers a retry. Two types are supported: `StatusCodeCondition` and `ExceptionsCondition`. By default, `StatusCodeCondition` includes the status codes 408, 429, 500, 502, 503, and 504. `ExceptionsCondition` includes AliyunException and IOException. A retry is triggered if any of these conditions are met.

You can customize the retry trigger conditions as follows:

  • To trigger a retry only if all conditions are met.

    darabonba.core.policy.retry.conditions.AndRetryCondition.create(RetryCondition... conditions)

    Example:

    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);
  • To trigger a retry if any condition is met.

    darabonba.core.policy.retry.conditions.OrRetryCondition.create(RetryCondition... conditions)

    Example:

    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

This parameter specifies the maximum number of retries. The default value is 3.