【问题标题】:Retry deleting pool or jobs using Azure Batch?使用 Azure Batch 重试删除池或作业?
【发布时间】:2017-08-04 16:07:42
【问题描述】:

我使用 this Microsoft tutorial 作为使用 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 循环中尝试它,如果它返回一个错误的状态代码,或者如果返回一个好的状态代码,则继续运行程序的其余部分?

感谢您的帮助。

【问题讨论】:

    标签: c# azure azure-batch


    【解决方案1】:

    您可以在batchClient 本身上提供重试策略,该策略将应用于所有可重试的操作(即,如果该操作是可重试的操作,客户端将自动代表您重试该操作)。例如,添加一个线性重试策略,每 5 秒重试一次,最多尝试 10 次:

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

    您可以使用任何existing retry policies 或通过实现IRetryPolicy 接口创建自己的重试策略。

    通常,ServiceUnavailable 会由于一些临时中断或问题而自行恢复。但是,话虽如此,您可能仍需要处理即使这些重试策略在最大尝试次数后失败的情况。这将取决于您的方案可以接受的情况,例如,您可能会认为作业删除会在很长一段时间内失败,但池删除失败的时间不会超过一段时间。在这种情况下,您可能希望包含更强大的重试处理或系统中的回退警报和通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      相关资源
      最近更新 更多