使用Azure Batch重试删除池或作业?

时间:2017-08-04 16:07:42

标签: c# azure azure-batch

我使用this Microsoft tutorial作为使用Azure批处理池,作业和容器的起点。

我已将用于删除池和作业的代码更改为

// 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 个答案:

答案 0 :(得分:4)

您可以在@RunWith(SpringRunner.class) @SpringBootTest(classes=MainApplication.java) @DataJpaTest @ActiveProfiles("dev") @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) public class MyTestClass { 本身上提供重试策略,该策略将适用于所有可重试的操作(即,如果是可重试的操作,客户端将代表您自动重试该操作)。例如,要添加线性重试策略,该策略每5秒重试最多10次:

batchClient

您可以使用existing retry policies中的任何一个,也可以通过实施IRetryPolicy界面来创建自己的重试策略。

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