我使用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对象),但请注意池和作业仍然存在。
JobOperations
或PoolOperations
似乎没有重试策略的概念,所以有没有其他方法可以让它重新尝试删除池和/或作业几次返回ServiceUnavailable状态?或者我应该在基本上是一个for循环中尝试它,如果它返回一个错误的状态代码,或者如果一个好的状态代码回来的话,继续执行其余的程序,那么它会运行多达5次(或那样)?
感谢您的帮助。
答案 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将自行恢复。然而,话虽如此,您可能仍需要处理在最大尝试次数后即使这些重试策略失败的情况。这将取决于您的方案可接受的内容,例如,您可以确定作业删除在较长时间内失败,但是池删除失败的时间超过一段时间是不正常的。在这种情况下,您可能希望包含更强大的重试处理,或者在系统中包含后备警报和通知。