

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在適用於 Rust 的 AWS SDK 中設定重試
<a name="retries"></a>

SDK AWS for Rust 為服務請求和可自訂組態選項提供預設的重試行為。呼叫 AWS 服務 偶爾會傳回未預期的例外狀況。如果重試呼叫，某些類型的錯誤可能會成功，例如限流或暫時性錯誤。

您可以使用共用 AWS `config`檔案中的環境變數或設定，全域設定重試行為。如需此方法的資訊，請參閱 *AWS SDKs和工具參考指南*中的[重試行為](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html)。它還包含重試策略實作的詳細資訊，以及如何逐一選擇。

或者，您也可以在程式碼中設定這些選項，如下列各節所示。

## 預設重試組態
<a name="defaultRetryConfig"></a>

 每個服務用戶端都會預設為透過 [https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html](https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html) 結構提供的`standard`重試策略組態。根據預設，會嘗試三次通話 *（初次嘗試，加上兩次重試*)。此外，每次重試都會延遲一小段的隨機持續時間，以避免重試風暴。此慣例適用於大多數使用案例，但在高輸送量系統等特定情況下可能不合適。

 只有某些類型的錯誤會被 SDKs 視為可重試。可重試錯誤的範例如下：
+ 通訊端逾時
+ 服務端限流
+ HTTP 5XX 回應等暫時性服務錯誤

下列範例**不**被視為可重試：
+ 缺少參數或其無效
+ 身分驗證/安全錯誤
+ 設定錯誤例外狀況

您可以透過設定最大嘗試次數、延遲和退避組態來自訂`standard`重試策略。

## 最大嘗試次數
<a name="maxAttempts"></a>

您可以將修改過的 提供給 [https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html](https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html)，以自訂程式碼中的最大嘗試次數`aws_config::defaults`：

```
const CUSTOM_MAX_ATTEMPTS: u32 = 5;
let retry_config = RetryConfig::standard()
    // Set max attempts. When max_attempts is 1, there are no retries.
    // This value MUST be greater than zero.
    // Defaults to 3.
    .with_max_attempts(CUSTOM_MAX_ATTEMPTS);
  
let config = aws_config::defaults(BehaviorVersion::latest())
    .retry_config(retry_config)
    .load()
    .await;
```

## 延遲和退避
<a name="delays"></a>

如果需要重試，預設重試策略會在進行後續嘗試之前等待。第一次重試的延遲很小，但之後重試會呈指數增長。延遲的最大數量會受到限制，使其不會太大。

隨機抖動會套用至所有嘗試之間的延遲。抖動有助於減輕可能導致重試風暴的大型機群的影響。如需指數退避和抖動的深入討論，請參閱 *AWS 架構部落格*中的[指數退避和抖動](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)。

 您可以將修改後的 提供給 [https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html](https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html)，以自訂程式碼中的延遲設定`aws_config::defaults`。下列程式碼會將組態設定為將第一次重試嘗試延遲最多 100 毫秒，且任何重試嘗試之間的時間上限為 5 秒。

```
let retry_config = RetryConfig::standard()
    // Defaults to 1 second.
    .with_initial_backoff(Duration::from_millis(100))
    // Defaults to 20 seconds.
    .with_max_backoff(Duration::from_secs(5));
  
let config = aws_config::defaults(BehaviorVersion::latest())
    .retry_config(retry_config)
    .load() 
    .await;
```

## 自適應重試模式
<a name="AdaptiveRetryMode"></a>

 作為`standard`模式重試策略的替代方案，`adaptive`模式重試策略是一種進階方法，可尋求理想的請求率，以將限流錯誤降至最低。

**注意**  
自適應重試是一種進階重試模式。通常不建議使用此策略。請參閱 *AWS SDKs和工具參考指南*中的[重試行為](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html#standardvsadaptive)。

自適應重試包含標準重試的所有功能。它會新增用戶端速率限制器，測量節流請求相較於非節流請求的速率。它也會限制流量以嘗試保持在安全頻寬內，理想情況下會導致零限流錯誤。

速率會即時適應不斷變化的服務條件和流量模式，並可能相應地增加或減少流量速率。重要的是，速率限制器可能會延遲高流量案例中的初始嘗試。

您可以提供修改過的 ，在程式碼中選取`adaptive`重試策略[https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html](https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html)：

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .retry_config(RetryConfig::adaptive())
    .load()
    .await;
```