我在Azure有一个网络作业,托管在一个应用程序服务上,它不用于任何事情。我目前正在从Visual部署我的not作业,但这将在将来发生变化,因为它不在生产中。这是一个编译成EXE的.NET Core3.1应用程序网络作业,但这与这个问题无关(我知道Azure函数,但这也不是我问题的一部分)。
网络作业是由队列触发的连续的网络作业。我已经把它设置为同时运行10批。我在网上寻找答案,但我发现答案不明确。
,我的问题是:,假设我有3个作业在运行。然后部署EXE文件的新版本。这似乎没有问题。但是正在运行的作业会发生什么呢?他们会继续跑到最后吗?还是会失败而停止呢?我还没有完全解决这个问题,我想在这里问一下,如果有人在这方面有很好的经验的话。
与队列相关的配置如下所示,如果这有帮助的话:
.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage(a =>
{
a.BatchSize = 10;
a.NewBatchThreshold = 5;
a.MaxDequeueCount = 1;
a.MaxPollingInterval = TimeSpan.FromSeconds(20);
});
})谢谢!
发布于 2020-09-24 06:30:54
,但是正在运行的作业会怎么样呢?他们会继续跑到最后吗?还是会失败而停止呢?
当使用WebJob SDK的WebJobs从队列中获取消息时,它会以10分钟的租约获得消息。如果作业进程在处理消息时死亡,则租约在10分钟后到期,消息返回到队列中。如果WebJob重新启动,它将再次选择该消息。只有当该函数成功完成时,该消息才会被删除。
因此,如果作业立即死亡并重新启动,就像在重新部署的情况下一样,可能需要10分钟才能再次选择消息。此外,由于这一点,建议您自己保存状态或使函数幂等。
在WebJobs仪表板中,您将看到对同一条消息的两个调用。其中一个将被标记为从未完成,因为函数执行从未完成。
不幸的是,没有现成的解决方案来阻止作业在部署期间运行。您必须创建自己的通知逻辑(通过队列消息?)部署是关于开始,然后中止主机。主机中止将等待任何现有函数停止,并防止新函数启动。但是,如果您有多个get作业实例,这是一个非常棘手的情况,因为只有其中一个实例会得到通知。
https://stackoverflow.com/questions/64035831
复制相似问题