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. NserviceBus忽略重試策略
- 4. mongodb全文搜索策略
- 5. Postgres的搜索策略
- 6. ORM中的搜索策略
- 7. 使用Lucene.Net搜索策略
- 8. Symfony2搜索引擎策略
- 9. Azure API管理策略搜索和替換
- 10. 瞭解logstash重試策略
- 11. CompletionService中的重試策略
- 12. Android okHttp重試策略
- 13. 宇宙重試策略DB
- 14. 策略在Azure上
- 15. 在Azure Web App中重寫策略
- 16. 如何影響Azure C#中的GetSubscription()和SubscriptionExists()的重試策略#
- 17. 設置Azure調度程序作業重試策略
- 18. Azure服務總線重試策略的minbackoff不起作用?
- 19. SQL Azure重試邏輯框架TransientFaultHandling是否附帶默認重試策略?
- 20. 優化搜索速度的策略
- 21. 搜索查詢的緩存策略
- 22. 最佳搜索性能收集策略?
- 23. 谷歌地圖搜索策略
- 24. 將Azure表存儲的重試策略與Azure函數結合使用
- 25. 在二叉搜索樹中查找重複條目的策略
- 26. Azure blob存儲 - blob策略
- 27. Azure緩存組策略
- 28. Azure APIM策略編輯器
- 29. Azure網站緩存策略
- 30. Azure表分區策略
的
WaitAndRetryAsync
功能的ID是你具體指重試時指數API拋出IndexBatchException?對於所有其他情況,.NET SDK已經使用具有指數回退的默認重試策略。 –@brucejohnston是的。據我們可以告訴默認策略是500錯誤,但如果負載問題導致失敗則不會。 – user2981411
是的,你需要明確處理IndexBatchException。澄清 - 「存儲」失敗文檔的ID是什麼意思?你的意思是堅持他們嗎? –