gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:05:53 26 4
gpt4 key购买 nike

主题确实说明了一切:) 假设我有一个非常繁忙的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com