AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS

Posted cloudrivers

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS相关的知识,希望对你有一定的参考价值。

AWS 中的错误重试和指数退避

Error Retries and Exponential Backoff in AWS

Do some asynchronous operation.

retries = 0

DO
wait for (2^retries * 100) milliseconds

status = Get the result of the asynchronous operation.

IF status = SUCCESS
retry = false
ELSE IF status = NOT_READY
retry = true
ELSE IF status = THROTTLED
retry = true
ELSE
Some other error occurred, so stop calling the API.
retry = false
END IF

retries = retries + 1

WHILE (retry AND (retries < MAX_RETRIES))

 

===============================

 

public enum Results
SUCCESS,
NOT_READY,
THROTTLED,
SERVER_ERROR

/*
* Performs an asynchronous operation, then polls for the result of the
* operation using an incremental delay.
*/
public static void doOperationAndWaitForResult()

try
// Do some asynchronous operation.
long token = asyncOperation();

int retries = 0;
boolean retry = false;

do
long waitTime = Math.min(getWaitTimeExp(retries), MAX_WAIT_INTERVAL);

System.out.print(waitTime + "\n");

// Wait for the result.
Thread.sleep(waitTime);

// Get the result of the asynchronous operation.
Results result = getAsyncOperationResult(token);

if (Results.SUCCESS == result)
retry = false;
else if (Results.NOT_READY == result)
retry = true;
else if (Results.THROTTLED == result)
retry = true;
else if (Results.SERVER_ERROR == result)
retry = true;

else
// Some other error occurred, so stop calling the API.
retry = false;

while (retry && (retries++ < MAX_RETRIES));

catch (Exception ex)

/*
* Returns the next wait interval, in milliseconds, using an exponential
* backoff algorithm.
*/
public static long getWaitTimeExp(int retryCount)

long waitTime = ((long) Math.pow(2, retryCount) * 100L);

return waitTime;

以上是关于AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS的主要内容,如果未能解决你的问题,请参考以下文章

你真的会重试吗?——重试机制之二进制指数退避机制

AWS Beanstalk:SQS 的指数退避?

PubSub:如何设置没有指数退避的重试策略?

python中的指数退避实现

RxJava 中的指数退避

sh Bash中的指数退避