azure - 部署 Web 作业时, "in-progress"作业会发生什么情况?

标签 azure azure-webjobs

主题确实说明了一切:) 假设我有一个非常繁忙的 Azure 连续 Web 作业,正在从 azure 队列进行处理:

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

如果我重新部署网络作业,我可以看到任何当前正在执行的作业似乎都已中止(我看到“从未完成”状态)。该工作在我释放后会重播还是会永远丢失?

此外,是否有一种很好的方法来确保在部署 webjobs 时没有作业正在运行,或者是否由开发人员编写解决方案(例如每次运行时检查的配置标志)。

谢谢

最佳答案

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

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

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

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

关于azure - 部署 Web 作业时, "in-progress"作业会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28042485/

相关文章:

asp.net-mvc - Piranha CMS 和 Azure 存储

azure - 将 ClaimsPrincipal 从 Azure Function 传递到 BlobClient

azure - 通过 FTP 上传/发布 Azure Webjob

azure - 如何在Azure webjobs中加载外部模块Powershell

azure - 如何在 Azure Bot Framework Composer v1.4.0 中获取用户对话数据并将其传递到后端 API?

azure - 当您运行多个网站时,在一个 Azure 网站上运行负载测试时是否会对性能产生影响

python - pySpark 项目的 Azure DevOps CI 管道

asp.net - 异步启动长时间运行的进程

Azure WebJobs 和线程安全

.net - 连续 WebJobs 和 CancellationToken