重试和超时 - 适用于 .NET 的 AWS 开发工具包
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

重试和超时

的 适用于 .NET 的 AWS 开发工具包 使您能够配置HTTP请求的重试次数和超时值 AWS 服务。如果重试和超时的默认值不适用于您的应用程序,您可以针对具体要求调整这些值,但请务必了解这样做将对应用程序的行为带来什么影响。

在确定重试和超时值时,请考虑以下因素:

  • 应如何 适用于 .NET 的 AWS 开发工具包 并且您的应用程序会在网络连接下降或 AWS 服务无法访问? 您是希望调用快速失败,还是希望调用代表您不断重试?

  • 您的应用程序是必须能够及时响应的面向用户的应用程序或网站,还是更能容忍延迟增加的后台处理任务?

  • 应用程序是否部署在低延迟的可靠网络上,或者是否部署在连接不可靠的远程位置?

Retries

Overview

的 适用于 .NET 的 AWS 开发工具包 可以重试因服务器端限制或断开连接而失败的请求。您可以使用两个服务配置类属性来指定服务客户端的重试行为。服务配置类从摘要继承这些属性 Amazon.Runtime.ClientConfig 类别 适用于 .NET 的 AWS 开发工具包 API Reference:

  • RetryMode 指定三种重试模式之一,这些模式在 Amazon.Runtime.RequestRetry模式 枚举。

    可以使用 AWS_RETRY_MODE 环境变量或 retry_mode(重试模式) 设置 AWS 配置文件。

  • MaxErrorRetry 指定在服务客户端级别允许的重试次数;SDK在失败和抛出异常之前,会重试指定次数的操作。

    可以使用 AWS_MAX_ATTEMPTS 环境变量或 最大尝试次数 设置 AWS 配置文件。

这些属性的详细描述见摘要 Amazon.Runtime.ClientConfig 类别 适用于 .NET 的 AWS 开发工具包 API Reference. 每个值 RetryMode 默认情况下对应于特定值 MaxErrorRetry,如下表所示。

RetryMode Corresponding MaxErrorRetry (Amazon DynamoDB) Corresponding MaxErrorRetry (all others)
Legacy 10 4
Standard 10 2
Adaptive (experimental) 10 2

Behavior

当应用程序启动时

当应用程序启动时,默认值为 RetryModeMaxErrorRetry 由SDK配置。除非指定其他值,否则这些默认值在创建服务客户端时使用。

  • 如果在您的环境中未设置属性,则默认为 RetryMode 配置为 传承 以及默认 MaxErrorRetry 用来自前述表的对应值配置。

  • 如果在您的环境中设置了重试模式,则此值用作 RetryMode。默认 MaxErrorRetry 使用上表中的相应值进行配置,除非已在您的环境中设置了最大误差值(下面描述)。

  • 如果在您的环境中设置了最大错误值,则此值用作 MaxErrorRetry。 Amazon DynamoDB 是此规则的例外;默认 DynamoDB 值 MaxErrorRetry 始终是上表的值。

您的应用程序运行时

创建服务客户端时,可以使用的默认值 RetryModeMaxErrorRetry,如前所述,或者您可以指定其他值。要指定其他值,请创建并包含服务配置对象,例如 AmazonDynamoDBConfigAmazonSQS配置 创建服务客户端时。

创建服务客户端后,无法更改其值。

注意事项:

重试时,请求的延迟增加。您应根据应用程序对请求总延迟和错误率的限制来配置重试次数。

Timeouts

的 适用于 .NET 的 AWS 开发工具包 使您能够在服务客户端级别配置请求超时和套接字读/写超时值。这些值在 Timeout 以及 ReadWriteTimeout 摘要的属性 Amazon.Runtime.ClientConfig 类。这些值作为 TimeoutReadWriteTimeout 特性 HttpWeb请求 对象创建 AWS 服务客户端对象。默认情况下,Timeout 值为 100 秒,ReadWriteTimeout 值为 300 秒。

当您的网络具有高延迟或存在导致操作重试的情况时,使用较长的超时值和较高的重试次数会导致一些开发工具包操作看上去没有响应。

注意

针对可移植类库 (PCL) 的适用于 .NET 的 AWS 开发工具包版本使用 HttpClient 类,而不是使用 HttpWebRequest 类,并且仅支持 Timeout 属性。

以下是默认超时值的例外情况。明确设置超时值时将覆盖这些值。

Example

以下示例向您展示了如何指定 标准 重试模式,最多重试3次,超时10秒,读/写超时10秒(如果适用)。的 亚马逊3客户 构造函数被赋予一个 AmazonS3配置 对象。

var s3Client = new AmazonS3Client( new AmazonS3Config { Timeout = TimeSpan.FromSeconds(10), // NOTE: The following property is obsolete for // versions of the AWS SDK for .NET that target .NET Core. ReadWriteTimeout = TimeSpan.FromSeconds(10), RetryMode = RequestRetryMode.Standard, MaxErrorRetry = 3 });