首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure WebJob部署

Azure WebJob部署
EN

Stack Overflow用户
提问于 2020-09-23 20:34:10
回答 1查看 146关注 0票数 0

我在Azure有一个网络作业,托管在一个应用程序服务上,它不用于任何事情。我目前正在从Visual部署我的not作业,但这将在将来发生变化,因为它不在生产中。这是一个编译成EXE的.NET Core3.1应用程序网络作业,但这与这个问题无关(我知道Azure函数,但这也不是我问题的一部分)。

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

,我的问题是:,假设我有3个作业在运行。然后部署EXE文件的新版本。这似乎没有问题。但是正在运行的作业会发生什么呢?他们会继续跑到最后吗?还是会失败而停止呢?我还没有完全解决这个问题,我想在这里问一下,如果有人在这方面有很好的经验的话。

与队列相关的配置如下所示,如果这有帮助的话:

代码语言:javascript
复制
.ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices();
        b.AddAzureStorage(a =>
        {
            a.BatchSize = 10;
            a.NewBatchThreshold = 5;
            a.MaxDequeueCount = 1;
            a.MaxPollingInterval = TimeSpan.FromSeconds(20);
        });
    })

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 06:30:54

,但是正在运行的作业会怎么样呢?他们会继续跑到最后吗?还是会失败而停止呢?

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

因此,如果作业立即死亡并重新启动,就像在重新部署的情况下一样,可能需要10分钟才能再次选择消息。此外,由于这一点,建议您自己保存状态或使函数幂等。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64035831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档