.NET NEST 7.X客户端DeleteByQuery遇版本冲突是否支持自动重试?
问题
我们使用.NET NEST客户端(7.X版本)操作Elasticsearch,现咨询:当执行DeleteByQuery遇到version_conflicts时,NEST或ElasticSearch是否提供自动重试机制,还是需要调用方通过判断response.version_conflicts > 0来自行重试?
代码示例:
var client = new ElasticClient(m_ConnectionSettings); var response = client.DeleteByQuery<ResourceSearchData>( q => q.Query( e => e.Ids( descriptor => descriptor.Values( resourcesToDelete.Select(data => data.Id))) ).WaitForCompletion());
回答
- Elasticsearch本身和NEST客户端都没有默认开启DeleteByQuery操作的版本冲突自动重试机制
- 你可以通过在DeleteByQuery请求中配置
Conflicts()方法开启自动重试,指定重试次数。示例代码如下:
var response = client.DeleteByQuery<ResourceSearchData>(q => q .Query(e => e.Ids(descriptor => descriptor.Values(resourcesToDelete.Select(data => data.Id)))) .Conflicts(c => c.Proceed().RetryOnConflict(3)) // 指定遇到冲突时自动重试3次 .WaitForCompletion() );
其中RetryOnConflict(3)定义冲突重试次数,Proceed()表示冲突发生时不中止整个请求,继续处理其余文档。
- 若未配置自动重试,则需要你自行判断
response.VersionConflicts > 0来手动实现重试逻辑,比如循环重试直到冲突数为0或达到预设的重试上限。
内容的提问来源于stack exchange,提问作者Nahum Timerman
相关产品推荐
相关产品推荐

