重試和逾時 - AWS SDK for .NET

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

重試和逾時

AWS SDK for .NET可讓您設定 HTTP 要求AWS服務的重試次數和逾時值。如果重試和逾時的預設不適用於您的應用程式,您可以將它們兩者適時調整以配合您的需求,但請務必了解如此一來對應用程式產生的影響程度。

若要判斷哪些值用於重試和逾時,請考慮以下資訊:

  • 當網路連線能AWS SDK for .NET力下降或AWS服務無法連線時,和您的應用程式應該如何回應? 您是否希望快速呼叫失敗,還是應該呼叫保持重試?

  • 您的應用程式是使用者接觸應用程式,或是必須要有所回應的網站,或者是對延長的延遲時間具有更高容忍力的背景執行工作?

  • 應用程式是否部署在低延遲的可靠網路上,還是部署在連線不穩定的遠端位置?

重試

概要

AWS SDK for .NET可以重試因伺服器端節流或中斷連線而失敗的要求。您可以使用服務組態類別的兩個屬性來指定服務用戶端的重試行為。服務配置類從抽象亞馬遜。運行時繼承這些屬性。 ClientConfigAWS SDK for .NETAPI 參考的類別:

  • MaxErrorRetry指定服務用戶端層級允許的重試次數;SDK 會在失敗並擲回例外狀況之前,以指定的次數重試作業。

    您可以使用AWS_MAX_ATTEMPTS環境變數或共用AWS組態檔中的 max_tries 設定來控制應用程式的預設值。

這些屬性的詳細說明可以在抽象亞馬遜。運行時中找到。 ClientConfigAWS SDK for .NETAPI 參考的類別。依預設,的每個值都RetryMode對應至的特定值MaxErrorRetry,如下表所示。

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

Behavior (行為)

當您的應用程式開始

當您的應用程式啟動時,SDK MaxErrorRetry 會設定RetryMode和的預設值。除非您指定其他值,否則在建立服務用戶端時會使用這些預設值。

  • 如果未在您的環境中設定屬性,則的預設值會設定RetryModeLegacy,而預MaxErrorRetry設值會使用上表中的對應值來設定。

  • 如果已在您的環境中設定重試模式,則會使用該值做為的預設值RetryMode。除MaxErrorRetry非您的環境中也設定了最大錯誤值,否則預設值會使用上表中的對應值進行配置 (如下所述)。

  • 如果已在您的環境中設定最大錯誤值,則會將該值用作的預設值MaxErrorRetry。Amazon DynamoDB 是此規則的例外狀況;的預設 DynamoDB 值永遠MaxErrorRetry是上表中的值。

當您的應用程式執行

建立服務用戶端時,您可以使用RetryMode和的預設值MaxErrorRetry,如前所述,也可以指定其他值。若要指定其他值,請在建立服務用戶端時建立並包含服務設定物件,例如 AmazonDynamoDbConfigAmazonSQsConfig

建立服務用戶端之後,就無法變更這些值。

考量

當重試發生時,請求的延遲會增加。您應該設定您的重試,依據您的應用程式限制總請求延遲和錯誤率而設定。

逾時

AWS SDK for .NET可讓您在服務用戶端層級設定要求逾時和通訊端讀取/寫入逾時值。這些值在抽象亞馬遜。運行時的ReadWriteTimeout屬性中指定。Timeout ClientConfig類。這些值會作為AWS服務用戶端物件所建立之HttpWebRequest物件的TimeoutReadWriteTimeout屬性來傳遞。在預設情況下,Timeout 值為 100 秒,ReadWriteTimeout 值為 300 秒。

當您的網路有高延遲或存在會造成操作重試的條件,使用長逾時值和次數高的重試,會導致某些開發套件的操作看起來沒有回應。

注意

目標可攜式類別程式庫 (PCL) 的版本會使用HttpClient類別而非HttpWebRequest類別,且僅支援 Timeout 屬性。AWS SDK for .NET

以下為例外狀況的預設逾時值。這些值時在您明確設定逾時值時會被覆寫。

範例

下列範例說明如何指定標準重試模式、最多 3 次重試、10 秒逾時,以及 10 秒的讀取/寫入逾時 (如果適用)。亞馬遜 3 客戶端構造函數被賦予了一個亞馬遜 3 配置對象。

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 });