从 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。
对某些显示热处理响应的文档有任何建议或参考吗?
无需添加您自己的逻辑。默认情况下,SDK 有一个重试策略,它将自动重试已知的暂时性错误。
如果您想对其进行微调,您可以使用 CosmosClientOptions 并调整
MaxRetryAttemptsOnRateLimitedRequests
和 MaxRetryWaitTimeOnRateLimitedRequests
等属性(如果默认值不适合您的情况)。