2017-10-17 185 views
2

我想了解如何最好地實現cosmos db(documentdb)的重試/退避策略。 我明白,有內置於SDK中一些默認的重試機制,我可以在connectionpolicy這樣修改:宇宙重試策略DB

RetryOptions = new RetryOptions() { MaxRetryAttemptsOnThrottledRequests = 3, MaxRetryWaitTimeInSeconds = 60 } 

但是,我不知道如何影響我應該怎麼做異常管理。

目前我做了以下內容:

GetAsync<T>(Uri, Id) { 

    try { 

     ResourceResponse<Document> response = await client.ReadDocumentAsync(URiFactory.CreateDocumentUri(uri), new RequestOptions { PartitionKey = new PartitonKey(convert.ToInt64(id)) }).ConfigureAwait(false); 

    } 
    catch(DocumentClientException ex) { 
     if(ex.StatusCode == (HttpStatusCode)TooManyRequests) { 
      await Task.Run(async() => 
      { 
       await Task.Delay(ex.RetryAfter); 
       return await GetAsync<T>(Uri, Id).ConfigureAwait(false); 
      } 
     } 
    } 
} 

我需要這樣做重試?如果我發現異常,是否會停止默認重試嘗試?此外,默認的重試次數是多少?即它只是429?如果是的話,我需要手動處理錯誤代碼449?

任何幫助將不勝感激。

回答

0

定製RetryOptions僅用於處理油門(429錯誤代碼)。有關更多詳細信息,請參閱https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips#429

在異常部分:API將只在所有重試耗盡且異常情況下保留。

缺省情況下,狀態碼429的DocumentClientException是如果請求 繼續請求速率上述操作30秒的累計等待時間之後 返回。即使 當前的重試計數小於最大重試計數(即 的缺省值爲9或用戶定義的值),也會發生這種情況。