从 feed 迭代器处理 CosmosDb FeedResponse<T> 的正确方法?

问题描述 投票:0回答:1

从 feed 迭代器处理 CosmosDb FeedResponse 的正确方法是什么?

dotnet sdk 的文档有以下示例:

QueryDefinition queryDefinition = new QueryDefinition("select c.id From c where c.status = @status")
              .WithParameter("@status", "Failure");
using (FeedIterator<MyItem> feedIterator = this.Container.GetItemQueryIterator<MyItem>(
    queryDefinition))
{
    while (feedIterator.HasMoreResults)
    {
        FeedResponse<MyItem> response = await feedIterator.ReadNextAsync();
        foreach (var item in response)
        {
            Console.WriteLine(item);
        }
    }
}

但是该示例没有采用

response.StatusCode
,而且根据
文档
feedITerator.ReadNextAsync() 似乎不会抛出任何异常。

因此,我认为在获取提要迭代器响应时应该考虑

StatusCode
。例如,如果与数据库的连接不好,它可能会返回 500;如果我使用分配的读取单元,它可能会返回 429。可能还有很多其他情况,状态代码不是 200。

对某些显示热处理响应的文档有任何建议或参考吗?

.net azure-cosmosdb
1个回答
0
投票

无需添加您自己的逻辑。默认情况下,SDK 有一个重试策略,它将自动重试已知的暂时性错误

如果您想对其进行微调,您可以使用 CosmosClientOptions 并调整

MaxRetryAttemptsOnRateLimitedRequests
MaxRetryWaitTimeOnRateLimitedRequests
等属性(如果默认值不适合您的情况)。

© www.soinside.com 2019 - 2024. All rights reserved.