2
A
回答
1
这是我用什么:
private async Task<DocumentIndexResult> IndexWithExponentialBackoffAsync(IndexBatch<IndexModel> indexBatch)
{
return await Policy
.Handle<IndexBatchException>()
.WaitAndRetryAsync(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (ex, span) =>
{
indexBatch = ((IndexBatchException)ex).FindFailedActionsToRetry(indexBatch, x => x.Id);
})
.ExecuteAsync(async() => await _searchClient.IndexAsync(indexBatch));
}
它使用Polly library处理指数退避。在这种情况下,我使用型号为IndexModel
的ID字段名为Id
。 如果你想登录或储存失败的尝试,你可以做到这一点像
((IndexBatchException)ex)ex.IndexingResults.Where(r => !r.Succeeded).Select(r => r.Key).<Do something here>
1
目前还没有展示如何正确地对IndexBatchException
重试样品。但是,您可以使用一种方法使其更易于实施:IndexBatchException.FindFailedActionsToRetry。此方法从IndexBatchException中提取失败文档的ID,将它们与给定批处理中的操作相关联,并返回仅包含需要重试的失败操作的新批处理。
关于其他重试逻辑,您可能会发现ClientRuntime library这个代码有用。您需要根据您的负载特性调整参数。要记住的重要一点是,在重试之前应该使用指数回退来帮助您的服务恢复,否则您的请求可能会受到限制。
相关问题
- 1. 搜索策略
- 2. 实体框架 - SQL Azure重试策略
- 3. ORM中的搜索策略
- 4. mongodb全文搜索策略
- 5. Postgres的搜索策略
- 6. Azure API管理策略搜索和替换
- 7. 了解logstash重试策略
- 8. 宇宙重试策略DB
- 9. CompletionService中的重试策略
- 10. 在Azure Web App中重写策略
- 11. 设置Azure调度程序作业重试策略
- 12. Azure服务总线重试策略的minbackoff不起作用?
- 13. 最佳搜索性能收集策略?
- 14. 将Azure表存储的重试策略与Azure函数结合使用
- 15. Azure Table:表设计策略
- 16. Azure APIM策略编辑器
- 17. 实施ServiceBusTransientErrorDetectionStrategy的指数重试策略
- 18. Cassandra Datastax驱动程序重试策略
- 19. luigi每任务重试策略
- 20. Laravel索引策略
- 21. MySQL索引策略
- 22. solr索引策略
- 23. Python中__name__的搜索属性策略如何与正常策略不同?
- 24. 在蒙特卡罗树中改进默认策略(转出策略)搜索
- 25. EJB测试策略?
- 26. Google搜索政策
- 27. Azure搜索Multipolygon
- 28. 什么是Azure推荐的开发测试部署策略?
- 29. lucene索引更新策略
- 30. Azure搜索索引 - 搜索确切词
的
WaitAndRetryAsync
功能的ID是你具体指重试时指数API抛出IndexBatchException?对于所有其他情况,.NET SDK已经使用具有指数回退的默认重试策略。 –@brucejohnston是的。据我们可以告诉默认策略是500错误,但如果负载问题导致失败则不会。 – user2981411
是的,你需要明确处理IndexBatchException。澄清 - “存储”失败文档的ID是什么意思?你的意思是坚持他们吗? –