2017-10-17 3 views
2

Ich würde gerne verstehen, wie Sie am besten eine Wiederholung/Backoff-Stratergy für Cosmos db (Documentdb) zu implementieren. Ich verstehe, dass es einige Standardwiederholungs Mechanik in die sdk gebaut, die ich im connectionpolicy wie so ändern können:Retry Policy in Cosmos DB

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

Aber ich bin nicht sicher, wie dass die Auswirkungen, wie ich sollte Ausnahmemanagement tun.

Derzeit mache ich folgendes:

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

DO Ich brauche diese Wiederholungs zu tun? und wenn ich die Ausnahme abfängt, stoppt das die Standardwiederholversuche? Wie lauten die Standardwiederholversuche? ist es nur 429? Wenn ja, müsste ich den Fehlercode 449 manuell behandeln?

Eine Hilfe wird sehr geschätzt.

Antwort

0

Benutzerdefiniert RetryOptions wird nur verwendet, um Drosseln (429 Fehlercode) zu behandeln. Weitere Informationen finden Sie unter https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips#429.

Bei Ausnahme Teil: API wird nur nach allen mit Ausnahme erschöpften Wiederholungen freigeschalten.

standardmäßig die DocumentClientException mit dem Statuscode 429 ist nach einer kumulativen Wartezeit von 30 Sekunden zurück, wenn die Anforderung über dem Anforderungsrate in Betrieb bleibt. Dies tritt auch dann auf, wenn die aktuelle Wiederholungsanzahl kleiner als die maximale Wiederholungsanzahl ist, sei es der Standardwert von 9 oder ein benutzerdefinierter Wert.