gpt4 book ai didi

c# - DocumentDB transient 故障处理最佳实践

转载 作者:太空狗 更新时间:2023-10-29 21:27:15 24 4
gpt4 key购买 nike

我一直在为受限制的 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
}

最佳答案

您可以在 DocumentDB 数据迁移工具的 Github 存储库中找到使用 TransientFaultHandling Nuget 包的示例代码:

https://github.com/Azure/azure-documentdb-datamigrationtool/blob/master/DocumentDb/Microsoft.DataTransfer.DocumentDb.FunctionalTests/DocumentDbHelper.cs

看起来像这样:

private static IReliableReadWriteDocumentClient CreateClient(IDocumentDbConnectionSettings connectionSettings)
{
return new DocumentClient(new Uri(connectionSettings.AccountEndpoint), connectionSettings.AccountKey)
.AsReliable(new FixedInterval(10, TimeSpan.FromSeconds(1)));
}

关于c# - DocumentDB transient 故障处理最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31065690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com