Повторите политику в БД Космос

Я хотел бы понять, как лучше всего реализовать стратегию повторов / откатов для космоса db (documentdb). Я понимаю, что в SDK есть встроенная механика повтора по умолчанию, которую я могу изменить в политике соединения следующим образом:

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?

1 ответ

Изготовленный на заказ RetryOptions используется только для управления дросселями (код ошибки 429). Обратитесь к https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips для получения более подробной информации.

В части исключения: API будет сбрасываться только после того, как все попытки исчерпаны за исключением.

По умолчанию исключение DocumentClientException с кодом состояния 429 возвращается после совокупного времени ожидания 30 секунд, если запрос продолжает работать выше частоты запросов. Это происходит, даже если текущее число повторов меньше максимального числа повторений, будь то значение по умолчанию 9 или пользовательское значение.

Другие вопросы по тегам