Amazon Web Services中的API重试逻辑

时间:2016-10-19 06:33:31

标签: java amazon-web-services amazon-ec2 aws-java-sdk

http://docs.aws.amazon.com/general/latest/gr/api-retries.html

本文档提到"每个AWS SDK实现自动重试逻辑,AWS SDK for Java自动重试请求。"

如果我没有指定任何重试配置,Java AWS SDK的默认机制是什么?如果AWS服务端出现故障,我一直在使用Java AWS SDK并获得简单的服务异常。我从未经历过任何"自动"重试机制。有人可以解释一下这种重试机制是什么吗?

1 个答案:

答案 0 :(得分:13)

同一文档页面上写着:

  

AWS SDK for Java会自动重试请求,您可以使用ClientConfiguration类配置重试设置。

您应该查看ClientConfiguration的官方文档,它有很多方法可以调整其有关重试逻辑的行为。这是最重要的:

  • withMaxErrorRetry 设置失败的可重试请求的最大重试次数(例如:来自服务的5xx错误响应)
  • withRequestTimeout 设置在放弃和超时前完成请求的等待时间(以毫秒为单位)
  • withThrottledRetries 重试限制功能可在大部分请求失败且重试失败时智能地限制重试尝试[...]
  • withRetryPolicy这是最有趣的,它允许您选择RetryPolicy并更改:
    • BackoffStrategy 提供自定义退避策略以控制重试之间的休眠时间的钩子
    • RetryCondition 为是否应重试失败的请求提供自定义条件的挂钩
    • maxErrorRetry
    • honorMaxErrorRetryInClientConfig(是否尊重上述配置设置)

另请注意,如果您没有注意到自动重试机制,则可能是由于客户端错误。这些设置仅用于在服务器(5xx)或限制错误的情况下重试请求:

  

客户端错误(4xx)表示您需要在再次尝试之前修改请求以更正问题

如果您声称它是"服务方"如果失败,您应该提供一些代码来重现情况并分析实际情况。

现在关于默认值:

  

如果我没有指定任何重试配置,Java SDK的默认机制是什么?

您可以查找ClientConfiguration constant fields的默认值。但请注意,根据您使用的服务,它可能会有所不同(特别是DynamoDB是一种特殊情况)。另请检查PredefinedClientConfigurationsPredefinedRetryPolicies类。