本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
重試和逾時
AWS SDK for .NET可讓您設定 HTTP 要求AWS服務的重試次數和逾時值。如果重試和逾時的預設不適用於您的應用程式,您可以將它們兩者適時調整以配合您的需求,但請務必了解如此一來對應用程式產生的影響程度。
若要判斷哪些值用於重試和逾時,請考慮以下資訊:
-
當網路連線能AWS SDK for .NET力下降或AWS服務無法連線時,和您的應用程式應該如何回應? 您是否希望快速呼叫失敗,還是應該呼叫保持重試?
-
您的應用程式是使用者接觸應用程式,或是必須要有所回應的網站,或者是對延長的延遲時間具有更高容忍力的背景執行工作?
-
應用程式是否部署在低延遲的可靠網路上,還是部署在連線不穩定的遠端位置?
重試
概要
AWS SDK for .NET可以重試因伺服器端節流或中斷連線而失敗的要求。您可以使用服務組態類別的兩個屬性來指定服務用戶端的重試行為。服務配置類從抽象亞馬遜。運行時繼承這些屬性。 ClientConfigAWS SDK for .NETAPI 參考的類別:
-
RetryMode
指定三種重試模式之一,這些模式在亞馬遜。運行時中定義。 RequestRetryMode枚舉。您可以使用
AWS_RETRY_MODE
環境變數或共AWS用設定檔中的 retry_mode 設定來控制應用程式的預設值。
-
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
和的預設值。除非您指定其他值,否則在建立服務用戶端時會使用這些預設值。
-
如果未在您的環境中設定屬性,則的預設值會設定
RetryMode
為 Legacy,而預MaxErrorRetry
設值會使用上表中的對應值來設定。 -
如果已在您的環境中設定重試模式,則會使用該值做為的預設值
RetryMode
。除MaxErrorRetry
非您的環境中也設定了最大錯誤值,否則預設值會使用上表中的對應值進行配置 (如下所述)。 -
如果已在您的環境中設定最大錯誤值,則會將該值用作的預設值
MaxErrorRetry
。Amazon DynamoDB 是此規則的例外狀況;的預設 DynamoDB 值永遠MaxErrorRetry
是上表中的值。
當您的應用程式執行
建立服務用戶端時,您可以使用RetryMode
和的預設值MaxErrorRetry
,如前所述,也可以指定其他值。若要指定其他值,請在建立服務用戶端時建立並包含服務設定物件,例如 AmazonDynamoDbConfig 或 AmazonSQsConfig。
建立服務用戶端之後,就無法變更這些值。
考量
當重試發生時,請求的延遲會增加。您應該設定您的重試,依據您的應用程式限制總請求延遲和錯誤率而設定。
逾時
AWS SDK for .NET可讓您在服務用戶端層級設定要求逾時和通訊端讀取/寫入逾時值。這些值在抽象亞馬遜。運行時的ReadWriteTimeout
屬性中指定。Timeout
ClientConfig類。這些值會作為AWS服務用戶端物件所建立之HttpWebRequestTimeout
和ReadWriteTimeout
屬性來傳遞。在預設情況下,Timeout
值為 100 秒,ReadWriteTimeout
值為 300 秒。
當您的網路有高延遲或存在會造成操作重試的條件,使用長逾時值和次數高的重試,會導致某些開發套件的操作看起來沒有回應。
注意
目標可攜式類別程式庫 (PCL) 的版本會使用HttpClientHttpWebRequest
類別,且僅支援 Timeout
以下為例外狀況的預設逾時值。這些值時在您明確設定逾時值時會被覆寫。
-
Timeout
並且ReadWriteTimeout
如果被調用的方法上傳流(例如 Amazons3Client),則設置為最大值。 PutObjectAsync(),亞馬遜 3 客戶端。 UploadPartAsync()、AmazonGlacierClient。 UploadArchiveAsync(),依此類推。 -
AWS SDK for .NET該目標 .NET 框架的版本設置,
Timeout
並ReadWriteTimeout
為所有亞馬遜 3 客戶端和對象的最大值。AmazonGlacierClient -
目標可移植類庫(PCL)和 .NET 核心的版本設置
Timeout
為所有亞馬遜 3 客戶端和對象的最大值。AWS SDK for .NET AmazonGlacierClient
範例
下列範例說明如何指定標準重試模式、最多 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 });