首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure搜索RetryPolicy

Azure搜索RetryPolicy
EN

Stack Overflow用户
提问于 2016-11-12 20:12:09
回答 2查看 1.1K关注 0票数 4

我们正在使用蔚蓝搜索,需要实现重试策略以及存储失败文档的Ids,如所述。

有没有关于如何在Azure搜索中实现RetryPolicy策略的文档/示例?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-11 09:20:50

这就是我所用的:

代码语言:javascript
复制
 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));
 }

它使用波利图书馆来处理指数退避。在本例中,我使用了一个模型IndexModel,它有一个名为Id的id字段。如果您想记录或存储失败尝试的in,可以在WaitAndRetryAsync函数中这样做,如

代码语言:javascript
复制
((IndexBatchException)ex)ex.IndexingResults.Where(r => !r.Succeeded).Select(r => r.Key).<Do something here>
票数 2
EN

Stack Overflow用户

发布于 2016-11-15 19:48:34

目前还没有显示如何在IndexBatchException上正确重试的示例。但是,有一种方法可以用来使实现变得更容易:IndexBatchException.FindFailedActionsToRetry。此方法从IndexBatchException中提取失败文档的ID,将它们与给定批处理中的操作关联起来,并返回一个新批处理,其中只包含需要重新尝试的失败操作。

关于重试逻辑的其余部分,您可能会发现ClientRuntime库中的这段代码很有用。您需要根据负载的特性调整参数。重要的是,在重新尝试帮助您的服务恢复之前,您应该使用指数退避,因为否则可能会限制您的请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40567172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档