Amazon Web Services 中的 API 重试逻辑
Posted
技术标签:
【中文标题】Amazon Web Services 中的 API 重试逻辑【英文标题】:API retry logic in Amazon Web Services 【发布时间】:2017-02-28 15:34:33 【问题描述】:http://docs.aws.amazon.com/general/latest/gr/api-retries.html
本文档提到“每个 AWS SDK 实现自动重试逻辑,AWS SDK for Java 自动重试请求。”
如果我没有指定任何重试配置,Java AWS SDK 的默认机制是什么?我一直在使用 Java AWS SDK,如果 AWS 服务端出现故障,我会得到一个简单的服务异常。我从未体验过任何“自动”重试机制。谁能解释一下这个重试机制是什么?
【问题讨论】:
Java SDK 没有默认机制。亚马逊人用 Java 编写的 AWS 开发工具包代码默认包含客户端请求的重试。这意味着,如果客户端请求由于某些错误(如服务器忙、节流等)而无法连接到服务器,它将重试建立连接。可以使用ClientConfiguration
类配置尝试次数。
如果您使用的是 java sdk,自动重试不适用。如果您使用 aws sdk,则会应用自动回复。
【参考方案1】:
相同的文档页面说:
AWS SDK for Java 自动重试请求,您可以使用
ClientConfiguration
类配置重试设置。
您应该查看ClientConfiguration
的官方文档,它有很多方法可以调整其有关重试逻辑的行为。以下是最重要的:
withMaxErrorRetry
为失败的可重试请求设置最大重试次数(例如:来自服务的 5xx 错误响应)
withRequestTimeout
设置在放弃和超时之前等待请求完成的时间(以毫秒为单位)[...]
withThrottledRetries
重试限制是一项功能,当大部分请求失败且重试不成功时,它可以智能地限制重试尝试 [...]
withRetryPolicy
这是最有趣的,它允许您选择RetryPolicy
并更改:
BackoffStrategy
提供自定义退避策略以控制重试之间的睡眠时间的钩子
RetryCondition
提供关于是否应重试失败请求的自定义条件的钩子
maxErrorRetry
honorMaxErrorRetryInClientConfig
(是否尊重上述配置设置)
另外请注意,如果您没有注意到自动重试机制,可能是由于客户端错误。这些设置仅用于在服务器 (5xx) 或限制错误的情况下重试请求:
客户端错误 (4xx) 表示您需要修改请求以更正问题,然后再重试
如果您声称是“服务端”失败,您应该提供一些代码来重现该情况并分析实际发生的情况。
现在关于默认值:
如果我不指定任何重试配置,Java SDK 的默认机制是什么?
您可以查找ClientConfiguration
constant fields 的默认值。但请注意,它可能会因您使用的服务而异(特别是 DynamoDB 是一种特殊情况)。还要检查 PredefinedClientConfigurations
和 PredefinedRetryPolicies
类。
【讨论】:
我是 AWS 新手,我的要求是在不同的存储桶之间进行复制,如果在复制或读取对象时发生任何异常,方法应该重试。我正在使用 spring boot、java、aws sdk 1.11.x。你能提供任何例子吗? 很抱歉,但我认为如果您有一些具体问题未包含在此一般答案中,您应该将其作为问题发布(提及这一问题),以便单独回答。跨度>以上是关于Amazon Web Services 中的 API 重试逻辑的主要内容,如果未能解决你的问题,请参考以下文章
在 Java EE 中实现 Amazon Web Services 的在线照片处理服务示例
Amazon Web Services 与这些 Azure Web Services 最相似的是啥
将数据从 CSV 文件导入 Amazon Web Services RDS MySQL 数据库