2017-10-17 40 views
2

私は、cosmos db(documentdb)のリトライ/バックオフストラテジをどのように実装するのが最適かを理解したいと思います。 私はそうのようにConnectionPolicyに変更することができSDKに組み込まれているいくつかのデフォルトの再試行の力学があることを理解する:Cosmos 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またはユーザー定義値です。

関連する問題