本文档提到“每个AWS SDK实现自动重试逻辑,AWS SDK for Java自动重试请求”.
如果我没有指定任何重试配置,那么Java AWS SDK的默认机制是什么?如果AWS服务端出现故障,我一直在使用Java AWS SDK并获得简单的服务异常.我从未经历过任何“自动”重试机制.有人可以解释一下这种重试机制是什么吗?
解决方法
The AWS SDK for Java automatically retries requests,and you can configure the retry settings using the
ClientConfiguration
class.
您应该查看ClientConfiguration
的官方文档,它有很多方法可以调整其有关重试逻辑的行为.这是最重要的:
> withMaxErrorRetry
设置失败的可重试请求的最大重试次数(例如:来自服务的5xx错误响应)
> withRequestTimeout
设置在放弃和超时前完成请求的等待时间(以毫秒为单位)[…]
> withThrottledRetries
重试限制功能可在大部分请求失败且重试失败时智能地限制重试尝试[…]
> withRetryPolicy
这是最有趣的,它允许您选择RetryPolicy
并更改:
> BackoffStrategy
用于提供自定义退避策略以控制重试之间的休眠时间的钩子
> RetryCondition
用于提供是否应重试失败请求的自定义条件的挂钩
> maxErrorRetry
> honorMaxErrorRetryInClientConfig(是否遵守上述配置设置)
另请注意,如果您没有注意到自动重试机制,则可能是由于客户端错误.这些设置仅用于在服务器(5xx)或限制错误的情况下重试请求:
client errors (4xx) indicate that you need to revise the request to correct the problem before trying again
如果您声称它是“服务端”失败,您应该提供一些代码来重现情况并分析实际发生的情况.
现在关于默认值:
What is the default mechanism for Java SDK,if i don’t specify any retry config?
您可以查找ClientConfiguration constant fields的默认值.但请注意,它可能因您使用的服务而异(特别是DynamoDB是一种特殊情况).另请参阅PredefinedClientConfigurations
和PredefinedRetryPolicies
课程.