Передовая практика DocumentDB TransientFaultHandling
Я писал очень многословную логику повторов для дросселированных клиентских вызовов DocumentDB.
Пример ниже является типичным примером этого с 10 повторными попытками.
Мой вопрос в два раза: Это лучшая практика, и есть ли менее подробный способ справиться с этим? Я вижу, что естьMicrosoft.Azure.Documents.Client.TransientFaultHandling пакет nuget, который должен достичь тех же результатов с меньшим количеством кода, но я не могу найти никаких примеров в StackOverflow или Google, и, похоже, нет какой-либо четкой документации, доступной от Microsoft.
int maxRetryAttempts = 10;
while (maxRetryAttempts > 0)
{
try
{
// Attempt to call DocumentDB Method
// ---[DocumentDB Method Here]---
}
catch (DocumentClientException de)
{
if (de.StatusCode.HasValue)
{
var statusCode = (int)de.StatusCode;
if (statusCode == 429 || statusCode == 503)
{
//Sleep for retry amount
Thread.Sleep(de.RetryAfter);
//Decrement max retry attempts
maxRetryAttempts--;
}
}
}
catch (AggregateException ae)
{
foreach (Exception ex in ae.InnerExceptions)
{
if (ex is DocumentClientException)
{
var documentClientException = ex as DocumentClientException;
var statusCode = (int)documentClientException.StatusCode;
if (statusCode == 429 || statusCode == 503)
{
//Sleep for retry amount
Thread.Sleep(documentClientException.RetryAfter);
//Decrement max retry attempts
maxRetryAttempts--;
}
else
{
throw;
}
}
}
}
}
if (maxRetryAttempts < 0)
{
//Max retry attempts reached
}