在适用于 Rust 的 AWS SDK 中配置超时 - 适用于 Rust 的 AWS SDK

在适用于 Rust 的 AWS SDK 中配置超时

适用于 Rust 的 AWS SDK 提供了多种用于管理 AWS 服务请求超时和停滞数据流的设置。当网络中发生意外延迟和故障时,这些设置可以帮助应用程序以最佳状态运行。

API 超时

当存在可能导致请求尝试花费很长时间或完全失败的暂时性问题时,请务必检查和设置超时,这样应用程序才能实施快速失效机制并以最佳状态运行。SDK 可以自动重试失败的请求。为单个尝试和整个请求都设置超时是一种很好的做法。

适用于 Rust 的 SDK 提供了为请求建立连接的默认超时。SDK 没有为接收请求尝试或整个请求的响应设置任何默认最大等待时间。以下超时选项可用:

参数 默认值 描述
连接超时 3.1 秒 放弃连接前等待建立连接的最长时间。
操作超时 接收来自适用于 Rust 的 SDK 的响应之前要等待的最长时间,包括所有重试。
操作尝试超时 等待单次 HTTP 尝试的最长时间,超过该时长之后可以重试 API 调用。
读取超时 自请求发起到读取响应的第一个字节的最长时间。

以下示例演示了使用自定义超时值配置 Amazon S3 客户端的过程。

let config = aws_config::defaults(BehaviorVersion::latest()) .timeout_config( TimeoutConfig::builder() .operation_timeout(Duration::from_secs(5)) .operation_attempt_timeout(Duration::from_millis(1500)) .build() ) .load() .await; let s3 = aws_sdk_s3::Client::new(&config);

将这些操作和尝试超时一起使用时,可以对所有重试尝试所花费的总时间设置硬性限制。您还可以将单个 HTTP 请求设置为在慢速请求时快速失败。

除了在服务客户端上为所有操作设置这些超时值之外,您还可以为单个请求配置或覆盖这些超时值

重要

对于在适用于 Rust 的 SDK 返回响应后使用的流数据,操作和尝试超时不适用。例如,使用来自响应 ByteStream 成员的数据不受操作超时的影响。

停滞流保护

适用于 Rust 的 SDK 提供了另一种与检测停滞流相关的超时机制。停滞流是指在超过配置的宽限期后仍未生成任何数据的上传或下载流。这有助于防止应用程序无限期挂起而永远无法取得进展。

停滞流保护会在流空闲时间超过可接受时段时返回错误。

默认情况下,适用于 Rust 的 SDK 为上传和下载流启用停滞流保护,并查找至少 1 字节/秒的活动,同时提供 20 秒的宽限期。

以下示例展示了禁用上传保护并将无活动宽限期更改为 10 秒的自定义 StalledStreamProtectionConfig

let config = aws_config::defaults(BehaviorVersion::latest()) .stalled_stream_protection( StalledStreamProtectionConfig::enabled() .upload_enabled(false) .grace_period(Duration::from_secs(10)) .build() ) .load() .await;
警告

停滞流保护是一个高级配置选项。建议仅在应用程序对性能要求更高或这些值会导致一些其他问题时才更改这些值。

禁用停滞流保护

以下示例展示了如何完全禁用停滞流保护:

let config = aws_config::defaults(BehaviorVersion::latest()) .stalled_stream_protection(StalledStreamProtectionConfig::disabled()) .load() .await;