Azure WebJob部署
我在Azure中有一个webjob,托管在一个应用程序服务上,该服务不用于任何用途。我目前正在从VisualStudio部署我的webjob,但这将在将来发生变化,因为它尚未投入生产。它是一个编译成EXE的.NET Core 3.1应用程序webjob,但这对这个问题来说并不重要(我知道Azure函数,但这也不是我问题的一部分) webjob是由队列触发的连续webjob。我已将其设置为同时运行10批。我在网上寻找答案,但我发现答案不清楚 我的问题是:假设我有3个作业正在运行。然后我部署一个新版本的EXE文件。这似乎没有问题。但是正在运行的作业会发生什么情况呢?他们会一直跑到底吗?还是会失败并停止?我还没有完全解决这个问题,我想在这里问一下,以防有人在这方面有帮助的经验 我的队列相关配置如下(如果有帮助):Azure WebJob部署,azure,web-deployment,azure-webjobs,webjob,netcoreapp3.1,Azure,Web Deployment,Azure Webjobs,Webjob,Netcoreapp3.1,我在Azure中有一个webjob,托管在一个应用程序服务上,该服务不用于任何用途。我目前正在从VisualStudio部署我的webjob,但这将在将来发生变化,因为它尚未投入生产。它是一个编译成EXE的.NET Core 3.1应用程序webjob,但这对这个问题来说并不重要(我知道Azure函数,但这也不是我问题的一部分) webjob是由队列触发的连续webjob。我已将其设置为同时运行10批。我在网上寻找答案,但我发现答案不清楚 我的问题是:假设我有3个作业正在运行。然后我部署一个新版
.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage(a =>
{
a.BatchSize = 10;
a.NewBatchThreshold = 5;
a.MaxDequeueCount = 1;
a.MaxPollingInterval = TimeSpan.FromSeconds(20);
});
})
谢谢大家!
但是正在运行的作业会发生什么情况呢?他们会一直跑到底吗?还是会失败并停止
当使用WebJobs SDK的WebJob从队列中拾取消息时,它将以10分钟的租用时间获取该消息如果作业进程在处理消息时死亡,租约将在10分钟后到期,消息将返回队列。如果重新启动WebJob,它将再次拾取该消息。只有在功能成功完成时,该消息才会被删除
因此,如果作业死亡并立即重新启动(如在重新部署的情况下),则可能需要10分钟才能再次拾取消息。此外,由于这个原因,建议您自己保存状态或使函数幂等
在WebJobs仪表板中,您将看到同一消息的两个调用。其中一个将被标记为从未完成,因为函数执行从未完成
不幸的是,没有现成的解决方案来阻止作业在部署期间运行。您必须创建自己的逻辑来通知(通过队列消息?)部署即将开始,然后中止主机。主机中止将等待任何现有功能停止,并阻止新功能启动。但是,如果您有多个webjob实例,这是一个非常棘手的情况,因为其中只有一个实例会收到通知。很酷,这是我假设的,但最好是在不必设置记录和测试所有这些的作业的情况下得到确认。非常感谢。