【发布时间】: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