Azure Web 作业部署

Azure WebJob deployment

我在 Azure 中有一个网络作业,托管在一个不用于任何用途的应用服务上。我目前正在从 Visual Studio 部署我的网络作业,但由于它未投入生产,因此将来会发生变化。这是一个编译为 EXE 的 .NET Core 3.1 应用程序 webjob,但这对这个问题不重要(我知道 Azure Functions,但这也不是我的问题的一部分)。

网络作业是由队列触发的连续网络作业。我已将其同时设置为 运行 10 个批次。我在网上寻找答案,但我发现答案不明确。

我的问题是: 假设我有 3 份工作 运行ning。然后我部署了一个新版本的 EXE 文件。这似乎没有问题。但是 运行ning 的工作会怎样?他们会继续运行结束吗?还是会失败并停止?我还没有完全解决这个问题,我想在这里问一下,以防有人对此有有用的经验。

我的队列相关配置是这样的,如果有帮助的话:

.ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices();
        b.AddAzureStorage(a =>
        {
            a.BatchSize = 10;
            a.NewBatchThreshold = 5;
            a.MaxDequeueCount = 1;
            a.MaxPollingInterval = TimeSpan.FromSeconds(20);
        });
    })

谢谢!

But what happens to the jobs that are running? Will they continue running to the end? Or will it fail and stop?

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

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

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

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