http://docs.aws.amazon.com/general/latest/gr/api-retries.html
该文档提到“每个 AWS SDK 实现自动重试逻辑,AWS SDK for Java 自动重试请求。”
如果我没有指定任何重试配置,Java AWS SDK 的默认机制是什么?我一直在使用 Java AWS SDK,如果 AWS 服务端出现故障,我会得到一个简单的服务异常。我从未体验过任何“自动”重试机制。有人能解释一下这个重试机制是什么吗?
http://docs.aws.amazon.com/general/latest/gr/api-retries.html
该文档提到“每个 AWS SDK 实现自动重试逻辑,AWS SDK for Java 自动重试请求。”
如果我没有指定任何重试配置,Java AWS SDK 的默认机制是什么?我一直在使用 Java AWS SDK,如果 AWS 服务端出现故障,我会得到一个简单的服务异常。我从未体验过任何“自动”重试机制。有人能解释一下这个重试机制是什么吗?
相同的文档页面说:
AWS SDK for Java 自动重试请求,您可以使用
ClientConfiguration
该类配置重试设置。
您应该查看官方文档ClientConfiguration
,它有很多方法可以调整其有关重试逻辑的行为。以下是最重要的:
withMaxErrorRetry
设置失败的可重试请求的最大重试次数(例如:来自服务的 5xx 错误响应)withRequestTimeout
设置在放弃和超时之前等待请求完成的时间量(以毫秒为单位)[...]withThrottledRetries
重试限制是一项功能,当大部分请求失败并且重试不成功时,它可以智能地限制重试尝试 [...]withRetryPolicy
这是最有趣的,它允许您选择RetryPolicy
和更改:
BackoffStrategy
提供自定义退避策略以控制重试之间的睡眠时间的钩子RetryCondition
提供有关是否应重试失败请求的自定义条件的钩子maxErrorRetry
honorMaxErrorRetryInClientConfig
(是否尊重上述配置设置)另请注意,如果您没有注意到自动重试机制,则可能是由于客户端错误。这些设置仅用于在服务器 (5xx) 或限制错误的情况下重试请求:
客户端错误(4xx)表示您需要修改请求以更正问题,然后再重试
如果您声称它是“服务端”失败,您应该提供一些代码来重现这种情况并分析实际发生的情况。
现在关于默认值:
如果我没有指定任何重试配置,Java SDK 的默认机制是什么?
ClientConfiguration
您可以查找常量字段的默认值。但请注意,它可能会因您使用的服务而异(特别是 DynamoDB 是一种特殊情况)。检查也PredefinedClientConfigurations
和PredefinedRetryPolicies
类。