2017-08-04 36 views
0

我使用this Microsoft tutorial作爲使用Azure批處理池,作業和容器的起點。使用Azure Batch重試刪除池或作業?

我已經改變了他們的代碼刪除池和工作略低,以

// Cleanup Batch Account Resources 
// Clean up Job 
await batchClient.JobOperations.DeleteJobAsync($"{BatchConstants.JobIdPrefix}-{Guid}"); 

// Clean up Pool 
await batchClient.PoolOperations.DeletePoolAsync($"{BatchConstants.PoolIdPrefix}-{Guid}"); 

,當我在本地運行此代碼刪除當這個偉大的工程,但是當它上升到我的開發環境,它運行到一個問題游泳池或工作(通常是工作)。我找回狀態碼「ServiceUnavailable」。

當我手動登錄到Azure門戶時,我可以看到容器被刪除而沒有問題(所以我知道可以建立連接並且可以成功刪除Azure對象),但是請注意池和作業仍然存在。

似乎JobOperationsPoolOperations有一個重試策略的概念,那麼有沒有其他方法可以讓它重試刪除池和/或作業幾次,如果它恢復了ServiceUnavailable狀態?或者我應該在基本上是for循環中嘗試它,如果返回一個錯誤的狀態代碼,它會運行多達5次(或多次),或者如果良好的狀態代碼返回,則繼續執行程序的其餘部分?

感謝您的幫助。

回答

1

您可以在batchClient本身上提供重試策略,該策略適用於所有可重試的操作(即,如果客戶端是可重試操作,客戶端將自動以您的名義重試操作)。例如,要添加重試每隔5秒鐘10次最大的線性重試策略:

batchClient.CustomBehaviors.Add(RetryPolicyProvider.LinearRetryProvider(TimeSpan.FromSeconds(5), 10)) 

您可以使用任何existing retry policies或創建通過實施IRetryPolicy接口自己的重試策略。

由於某些暫時中斷或問題,通常ServiceUNAvailable將自行恢復。然而,儘管如此,您仍然需要處理即使這些重試策略在最大嘗試次數後仍然失敗的情況。這將取決於您的方案可以接受的內容,例如,您可能確定刪除作業會在一段較長的時間內失敗,但是,如果池刪除失敗的時間超過一段時間,則這樣做可能不正確。您可能希望在此情況下包含更強大的重試處理或系統中的後備警報和通知。