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

原文地址:https://www.cnblogs.com/cloudrivers/p/11328875.html

时间: 2024-08-30 11:22:19

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

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

网络上的大量组件 (例如 DNS 服务器.交换机.负载均衡器等) 都可能在某个指定请求生命周期中的任一环节出现问题.在联网环境中,处理这些错误回应的常规技术是在客户应用程序中实施重试.此技术可以提高应用程序的可靠性和降低开发人员的操作成本. 每个 AWS 开发工具包都会实现自动重试逻辑.AWS SDK for Java会自动重试请求,您可以使用 ClientConfiguration 类配置重试设置.例如,对于发出的请求采用最低延迟并且不想重试的网页,您可能会希望关闭重试逻辑.您可以使用 Cli

Dev C++中的错误的解决[Linker error] undefined reference to `__dyn_tls_init_callback&#39;

Dev C++中的错误的解决[Linker error] undefined reference to `__cpu_feat... 解决NOIP环境GUIDE和Dev之间的并存问题. 装上了NOIP的测试环境GUIDE后,想再用之前的Dev c++的编译器的时候,发现编译的时候出现问题,无法找到编译连接的库. 错误信息如下: [Linker error] undefined reference to `__cpu_features_init' ld returned 1 exit status

modelsim中,错误 Error: already declared in this scope ()

仿真软件modelsim中,错误 Error: already declared in this scope () 在定义这个信号前其它模块接口信号中调用了这个信号,modelsim仿真报错,通过把信号定义挪到调用模块前面问题解决. 可能是modelsim有要求,在块里边出现之前,必须先做声明.modelsim中,错误 Error: already declared in this scope (),布布扣,bubuko.com

软件测试作业2 — 软件测试中的错误Failure, Error, Fault的区别

软件测试中的错误Failure, Error, Fault的区别: Failure: External, incorrect behavior with respect to the requirements or other description of the expected behavior(预期行为出错或与其他的外部行为描述不符).指软件在运行时出现的功能的丧失,类似于看病时病人发病的症状. Fault: A static defect in the software(软件中的静态缺陷

SQL Server 2005 sa登录失败。已成功与服务器建立连接 但是在登录过程中发生错误。 provider 共享内存提供程序 error 0 管道的另一端上无任何进程。

SQL Server 2005 Express版 用户 'sa' 登录失败.该用户与可信 SQL Server 连接无关联.提示错误:已成功与服务器建立连接 但是在登录过程中发生错误. provider 共享内存提供程序 error 0 管道的另一端上无任何进程. 解决方案: 1.首先选中服务器(右键)->属性->安全性->服务器身份验证修改为"SQL SERVER和WINDOWS身份验证模式"2.其次展开服务器下面的"安全性"文件夹->登陆

关于PHP.INI中的错误ERROR报告级别设置

最近在写php的过程中发现php提示php notice:………………的字样,虽然这个只是php的提示内容,并没有什么大的影响,但是出于安全性和美观方面的考虑,小弟还是想把这个东西去掉. 那么,怎么办呢? 抬出baidu,直接复制.粘贴php notice:,这样搜索的结果,一般有两种情况: 一.直接来一句:error_reporting=E_ALL&~E_NOTICE,搞得你不知道什么意思?! 二. 1.在php.ini文件中改动error_reporting 改为: error_report

SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0 - 管道的另一端上无任何进程。

http://blog.csdn.net/github_35160620/article/details/52676416 如果你在使用新创建的 SQL Server 用户名和密码 对数据库进行连接的时候出现了下面的问题.阅读本篇博客可以帮助你解决这个问题. 已成功与服务器建立连接,但是在登录过程中发生错误.(provider: Shared Memory Provider, error:0 - 管道的另一端上无任何进程.)(Microsoft SQL Server,错误:233) 管道的另一端

Python学习-16.Python中的错误处理

虽然叫错误,但跟 C# 中的异常是一回事.只不过 Python 中叫错误(Error)而 C# 中叫异常(Exception). 先手工产生一个异常: 1 file = open('','r') 上面一句由于路径是空路径,因此文件肯定是不存在的,执行这一句会引发 FileNotFoundError 这个错误. 既然是错误的,程序也停止了,这是我们不希望的,因此得想办法处理一下. 在 Python 中,异常处理使用 try.except.finally 这三个关键字. 修改代码如下: 1 path

Swift中的错误处理

前言 任何代码都会发生错误,这些错误有些是可以补救的,有些则只能让程序崩溃.良好的错误处理能够让你的代码健壮性提高,提高程序的稳定性. 本文的Swift版本:Swift 3 Objective C 返回nil 如果出错了,就返回空是Objective C中的一种常见的处理方式.因为在Objective C中,向nil发送消息是安全的.比如: - (instancetype)init { self = [super init]; if (self) { } //如果初始化失败,会返回nil ret