作业已经 运行 时 azure logic 应用程序重试

azure logic app retry when job already running

我有一个 azure webjob,需要每 5 分钟使用参数“IsFullImport=false”调用一次,每周六凌晨 12 点使用参数“IsFullImport=true”调用一次。目前我有 2 个逻辑应用程序,重复设置指向同一个网络作业,1 个每 5 分钟运行一次,另一个每周六凌晨 12 点运行。

问题是,如果每 5 分钟一次的 Logic App 运行 在星期六凌晨 12 点的同一时间运行一次,我将收到 409 错误消息“与 WebJob 已经冲突 运行”。一旦凌晨 12 点出现错误,它将在下周六之前再次尝试。我查看了重试策略,它不适用于错误 409。我还查看了并发策略,它似乎只适用于同一逻辑应用程序的实例,而不适用于 2 个不同的逻辑应用程序。如果 webjob 已经 运行 或者可能有一个具有 2 个不同时间表和 api 调用的逻辑应用程序,我有没有办法让周六上午 12 点的逻辑应用程序重试?

Api 调用示例:

每 5 分钟调用一次:

https://mysite.scm.azurewebsites.net/api/triggeredwebjobs/MyJob/run?arguments="IsFullImport=false"

每周六中午 12 点打来电话: https://mysite.scm.azurewebsites.net/api/triggeredwebjobs/MyJob/run?arguments="IsFullImport=true"

对于这个需求,理论上我们可以在一个逻辑应用中实现。但如果我们在一个逻辑应用程序中进行,我认为我们需要处理很多关于时间的问题 Saturday 12am。所以我建议您在单独的逻辑应用程序中进行,并提供以下解决方案供您参考:

1. 在每个星期六上午 12 点逻辑应用程序的重复中,初始化一个名为 statusCode 的变量并将其值设置为 409.

2.然后在逻辑应用中添加“Until”循环,并将条件设置为statusCode不等于409

3. 在“Until”循环中,添加一个“HTTP”动作请求您的 api https://mysite.scm.azurewebsites.net/api/triggeredwebjobs/MyJob/run?arguments="IsFullImport=true 并使用“设置变量”操作将 statusCode 的值设置为 outputs('HTTP')?['statusCode']

4. 这一步很关键,点击“设置变量[=]的...按钮61=]”操作,然后单击“之后配置运行”。

检查 is successfulhas failed 选项。

5. 之后,您的逻辑应用将继续请求 api,直到 statusCode 不等于 409