Pec*_*tum 7 c# azure azure-cosmosdb
我想了解如何最好地为 Cosmos db (documentdb) 实施重试/退避策略。我知道 sdk 中内置了一些默认的重试机制,我可以像这样在 connectionpolicy 中进行更改:
RetryOptions = new RetryOptions() { MaxRetryAttemptsOnThrottledRequests = 3, MaxRetryWaitTimeInSeconds = 60 }
Run Code Online (Sandbox Code Playgroud)
但是,我不确定这会如何影响我应该如何进行异常管理。
目前我正在做以下事情:
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要重试吗?如果我捕捉到异常是否会停止默认的重试尝试?另外,默认的重试尝试捕获的是什么?即它只是429?如果是这样,我是否需要手动处理错误代码 449?
CustomRetryOptions
仅用于处理节流(429错误代码)。有关更多详细信息,请参阅https://learn.microsoft.com/en-us/azure/cosmos-db/performance-tips#429 。
关于异常部分:只有在异常情况下所有重试都用完后,API 才会退出。
默认情况下,如果请求继续以高于请求速率的速度运行,则在累积等待时间为 30 秒后,将返回状态代码 429 的 DocumentClientException。即使当前重试计数小于最大重试计数(无论是默认值 9 还是用户定义的值),也会发生这种情况。
归档时间: |
|
查看次数: |
6272 次 |
最近记录: |