2017-10-17 9 views
2

Je voudrais comprendre la meilleure façon de mettre en œuvre une straté- gie de réessai/backoff pour db cosmos (documentdb). Je comprends qu'il ya des mécanismes de relance par défaut intégré dans le sdk que je peux changer dans le connectionpolicy comme ceci:Réessayer la stratégie dans Cosmos DB

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

Cependant, je ne sais pas comment que les impacts que je dois faire la gestion des exceptions.

Actuellement, je fais ce qui suit:

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

dois-je faire nouvelle tentative? et si j'attrape l'exception cela arrête-t-il les tentatives de tentative par défaut? De plus, quelles sont les tentatives de tentative par défaut? c'est-à-dire seulement 429? Si oui, est-ce que je devrais manipuler le code d'erreur 449 manuellement?

Toute aide serait grandement appréciée.

Répondre

0

Personnalisé RetryOptions est uniquement utilisé pour gérer les étranglements (code d'erreur 429). Reportez-vous https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips#429 pour plus de détails.

Sur la partie exception: l'API ne sera libérée qu'après toutes les tentatives épuisées avec exception.

Par défaut, le DocumentClientException avec le code d'état 429 est retourné après un temps d'attente cumulé de 30 secondes si la demande continue de fonctionner au-dessus du taux de demande. Cela se produit même lorsque le nombre de tentatives actuel est inférieur au nombre maximal de tentatives, soit le par défaut de 9 ou une valeur définie par l'utilisateur.