Error retries and index AWS in retreat Error Retries and Exponential Backoff in AWS

Error retry the AWS and exponential backoff

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;
}

Guess you like

Origin www.cnblogs.com/cloudrivers/p/11328875.html