Amazon Web Services 中的 API 重试逻辑

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

本文档提到“每个 AWS 开发工具包都实现自动重试逻辑,适用于 Java 的 AWS 开发工具包会自动重试请求。

如果我不指定任何重试配置,Java AWS 开发工具包的默认机制是什么?我一直在使用Java AWS开发工具包,如果在AWS服务端出现问题,就会得到一个简单的服务异常。我从未遇到过任何“自动”重试机制。有人可以解释一下这种重试机制是什么吗?


答案 1

同一文档页面显示:

适用于 Java 的 AWS 开发工具包会自动重试请求,您可以使用该类配置重试设置。ClientConfiguration

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

  • withMaxError重试 设置失败的可重试请求的最大重试次数(例如:来自服务的 5xx 个错误响应)
  • withRequestTimeout 设置在放弃和超时之前等待请求完成的时间(以毫秒为单位) [...]
  • 与束缚重试重试是一项功能,当很大比例的请求失败且重试不成功时,它可以智能地限制重试尝试 [...]
  • 与雷特利政策这是最有趣的,它允许您选择重试策略并更改:
    • BackoffStrategy 用于提供自定义回退策略以控制重试之间的睡眠时间的钩子
    • 重试条件 用于提供有关是否应重试失败请求的自定义条件的挂钩
    • maxErrorRetry
    • honorMaxErrorRetryInClientConfig(是否遵守上述配置设置)

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

客户端错误 (4xx) 表示您需要修改请求以更正问题,然后再重试

如果您声称它是“服务端”失败,则应提供一些代码来重现情况并分析实际发生的情况。


现在关于默认值:

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

您可以查找常量字段的默认值。但请注意,它可能会因您使用的服务而异(特别是 DynamoDB 是一种特殊情况)。另请查看预定义客户端配置预定义重试策略类。ClientConfiguration


答案 2

推荐