是否使用 Azure 批处理重试删除池或作业?



我使用此Microsoft教程作为使用 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}");

当我在本地运行此代码时,这效果很好,但是当它进入我的开发环境时,它在删除池或作业(通常是作业(时会遇到问题。我得到状态代码"服务不可用"。

当我手动登录到 Azure 门户时,我可以看到容器已被删除,没有问题(因此我知道能够建立连接并且可以成功删除 Azure 对象(,但请注意池和作业仍处于活动状态。

JobOperationsPoolOperations似乎没有重试策略的概念,那么如果它返回服务不可用状态,是否有其他方法可以让它重试删除池和/或作业几次?或者我应该在本质上是一个 for 循环中尝试它,如果它返回一个错误的状态代码,它会运行多达 5(左右(次,或者如果返回一个好的状态代码,则继续程序的其余部分?

感谢您的帮助。

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

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

您可以使用任何现有的重试策略,也可以通过实现 IRetryPolicy 接口来创建自己的重试策略。

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

最新更新