当您部署网络作业时,"in-progress" 个作业会发生什么情况?

What happens to "in-progress" jobs when you deploy a webjob?

主题说的都是真的 :) 假设我有一个非常繁忙的 Azure 连续 web 作业,它正在从 azure 队列中处理:

    public static void ProcessQueue([QueueTrigger("trigger")] Info info)
    { .... }

如果我重新部署 web 作业,我可以看到任何当前正在执行的作业似乎都已中止(我看到 "Never Finished" 状态)。该工作是在我发布后重播还是永远丢失?

此外,是否有一种很好的方法来确保在我们部署网络作业时没有 运行ning 作业,或者是否由开发人员编写解决方案来解决这个问题(例如配置标志每 运行).

检查一次

谢谢

当使用 WebJobs SDK 的 WebJob 从队列中获取消息时,它会以 10 分钟的租期获取该消息。如果作业进程在处理消息时终止,则租约将在 10 分钟后到期,并且消息会返回到队列中。如果 WebJob 重新启动,它将再次选取该消息。仅当函数成功完成时才会删除消息。

因此,如果作业终止并立即重新启动(如重新部署的情况),可能需要长达 10 分钟的时间才能重新选取消息。此外,因此,建议自己保存状态或使函数幂等。

在 WebJobs 仪表板中,您将看到对同一消息的两次调用。其中之一将被标记为 Never Finished 因为函数执行从未完成。

遗憾的是,没有开箱即用的解决方案来防止 运行 部署期间的作业。您必须创建自己的逻辑来通知(通过队列消息?)部署即将开始,然后中止主机。主机中止将等待任何现有功能停止并阻止新功能启动。但是,如果您有多个 webjob 实例,这是一个非常棘手的情况,因为只有其中一个会收到通知。