- DynamoDB 教程
- DynamoDB - 首页
- DynamoDB - 概览
- DynamoDB - 基本概念
- DynamoDB - 环境
- DynamoDB - 操作工具
- DynamoDB - 数据类型
- DynamoDB - 创建表
- DynamoDB - 加载表
- DynamoDB - 查询表
- DynamoDB - 删除表
- DynamoDB - API 接口
- DynamoDB - 创建项
- DynamoDB - 获取项
- DynamoDB - 更新项
- DynamoDB - 删除项
- DynamoDB - 批量写入
- DynamoDB - 批量检索
- DynamoDB - 查询
- DynamoDB - 扫描
- DynamoDB - 索引
- 全局二级索引
- 本地二级索引
- DynamoDB - 聚合
- DynamoDB - 访问控制
- DynamoDB - 权限 API
- DynamoDB - 条件
- Web 身份联合
- DynamoDB - 数据管道
- DynamoDB - 数据备份
- DynamoDB - 监控
- DynamoDB - CloudTrail
- DynamoDB - MapReduce
- DynamoDB - 表活动
- DynamoDB - 错误处理
- DynamoDB - 最佳实践
- DynamoDB 有用资源
- DynamoDB - 快速指南
- DynamoDB - 有用资源
- DynamoDB - 讨论
DynamoDB - 错误处理
在请求处理失败时,DynamoDB 会抛出一个错误。每个错误都包含以下组件:HTTP 状态代码、异常名称和消息。错误管理依赖于您的 SDK,SDK 传播错误,或者依赖于您自己的代码。
代码和消息
异常属于不同的 HTTP 头状态代码。4xx 和 5xx 包含与请求问题和 AWS 相关的错误。
HTTP 4xx 类别中的一些异常如下所示:
AccessDeniedException - 客户端未能正确签名请求。
ConditionalCheckFailedException - 条件评估为假。
IncompleteSignatureException - 请求包含不完整的签名。
HTTP 5xx 类别中的异常如下所示:
- 内部服务器错误
- 服务不可用
重试和回退算法
错误来自各种来源,例如服务器、交换机、负载均衡器以及其他结构和系统组件。常见的解决方案包括简单的重试,这有助于提高可靠性。所有 SDK 都自动包含此逻辑,您可以设置重试参数以满足您的应用程序需求。
例如 - Java 提供了一个 maxErrorRetry 值来停止重试。
Amazon 建议除了重试之外,还使用回退解决方案来控制流。这包括逐步增加重试之间的等待时间,并在相当短的时间后最终停止。请注意,SDK 执行自动重试,但不执行指数回退。
以下程序是重试回退的示例:
public enum Results {
SUCCESS,
NOT_READY,
THROTTLED,
SERVER_ERROR
}
public static void DoAndWaitExample() {
try {
// asynchronous operation.
long token = asyncOperation();
int retries = 0;
boolean retry = false;
do {
long waitTime = Math.min(getWaitTime(retries), MAX_WAIT_INTERVAL);
System.out.print(waitTime + "\n");
// Pause for result
Thread.sleep(waitTime);
// Get result
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 {
// stop on other error
retry = false;
}
} while (retry && (retries++ < MAX_RETRIES));
}
catch (Exception ex) {
}
}
public static long getWaitTime(int retryCount) {
long waitTime = ((long) Math.pow(3, retryCount) * 100L);
return waitTime;
}
广告