Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure WebJob部署_Azure_Web Deployment_Azure Webjobs_Webjob_Netcoreapp3.1 - Fatal编程技术网

Azure WebJob部署

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个作业正在运行。然后我部署一个新版

我在Azure中有一个webjob,托管在一个应用程序服务上,该服务不用于任何用途。我目前正在从VisualStudio部署我的webjob,但这将在将来发生变化,因为它尚未投入生产。它是一个编译成EXE的.NET Core 3.1应用程序webjob,但这对这个问题来说并不重要(我知道Azure函数,但这也不是我问题的一部分)

webjob是由队列触发的连续webjob。我已将其设置为同时运行10批。我在网上寻找答案,但我发现答案不清楚

我的问题是:假设我有3个作业正在运行。然后我部署一个新版本的EXE文件。这似乎没有问题。但是正在运行的作业会发生什么情况呢?他们会一直跑到底吗?还是会失败并停止?我还没有完全解决这个问题,我想在这里问一下,以防有人在这方面有帮助的经验

我的队列相关配置如下(如果有帮助):

.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实例,这是一个非常棘手的情况,因为其中只有一个实例会收到通知。

很酷,这是我假设的,但最好是在不必设置记录和测试所有这些的作业的情况下得到确认。非常感谢。