API Amazon Web Services 中的重试逻辑
API retry logic in Amazon Web Services
http://docs.aws.amazon.com/general/latest/gr/api-retries.html
本文档提到 "each AWS SDK implements automatic retry logic and AWS SDK for Java automatically retries requests."
如果我没有指定任何重试配置,Java AWS SDK 的默认机制是什么?我一直在使用 Java AWS SDK,如果 AWS 服务端出现故障,我会得到一个简单的服务异常。我从未体验过任何 "automatic" 重试机制。谁能解释一下这个重试机制是什么?
同一个文档页面说:
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
This is the most interesting, it allows you to choose RetryPolicy
并更改:
BackoffStrategy
提供自定义退避策略以控制重试之间休眠时间的钩子
RetryCondition
用于提供是否重试失败请求的自定义条件的挂钩
maxErrorRetry
honorMaxErrorRetryInClientConfig
(是否尊重上面提到的配置设置)
另请注意,如果您没有注意到自动重试机制,可能是由于客户端错误。这些设置仅用于在服务器 (5xx) 或节流错误的情况下重试请求:
client errors (4xx) indicate that you need to revise the request to correct the problem before trying again
如果您声称它 "service side" 失败了,您应该提供一些代码来重现这种情况并分析实际发生的情况。
现在关于默认值:
What is the default mechanism for Java SDK, if i don't specify any retry config?
您可以查找 ClientConfiguration
constant fields. But note, that it may differ depending on the service you use (in particular DynamoDB is a special case). Check also PredefinedClientConfigurations
and PredefinedRetryPolicies
类.
的默认值
http://docs.aws.amazon.com/general/latest/gr/api-retries.html
本文档提到 "each AWS SDK implements automatic retry logic and AWS SDK for Java automatically retries requests."
如果我没有指定任何重试配置,Java AWS SDK 的默认机制是什么?我一直在使用 Java AWS SDK,如果 AWS 服务端出现故障,我会得到一个简单的服务异常。我从未体验过任何 "automatic" 重试机制。谁能解释一下这个重试机制是什么?
同一个文档页面说:
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
This is the most interesting, it allows you to chooseRetryPolicy
并更改:BackoffStrategy
提供自定义退避策略以控制重试之间休眠时间的钩子RetryCondition
用于提供是否重试失败请求的自定义条件的挂钩maxErrorRetry
honorMaxErrorRetryInClientConfig
(是否尊重上面提到的配置设置)
另请注意,如果您没有注意到自动重试机制,可能是由于客户端错误。这些设置仅用于在服务器 (5xx) 或节流错误的情况下重试请求:
client errors (4xx) indicate that you need to revise the request to correct the problem before trying again
如果您声称它 "service side" 失败了,您应该提供一些代码来重现这种情况并分析实际发生的情况。
现在关于默认值:
What is the default mechanism for Java SDK, if i don't specify any retry config?
您可以查找 ClientConfiguration
constant fields. But note, that it may differ depending on the service you use (in particular DynamoDB is a special case). Check also PredefinedClientConfigurations
and PredefinedRetryPolicies
类.