【问题标题】:Retry Policy in Cosmos DBCosmos DB 中的重试策略
【发布时间】:2017-10-17 14:23:52
【问题描述】:

我想了解如何最好地为 cosmos 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吗?

【问题讨论】:

    标签: c# azure azure-cosmosdb


    【解决方案1】:

    自定义RetryOptions 仅用于处理油门(429 错误代码)。有关详细信息,请参阅https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips#429

    在异常部分:API 将仅在所有重试因异常而用尽后才退出。

    默认情况下,状态码为 429 的 DocumentClientException 是 如果请求在累积等待时间 30 秒后返回 继续在请求率之上运行。即使当 当前重试次数小于最大重试次数,无论是 默认值为 9 或用户定义的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多