From Azure 网站始终在线 https://stackoverflow.com/questions/26578934/azure-website-always-on and Azure 网站上“始终开启”设置的含义 https://stackoverflow.com/questions/25545677/meaning-of-always-on-setting-on-azure-web-site我假设 Azure WebJobs 托管在 IIS 中并使用 IIS 资源(这是我们的网站资源)。
此外,在定价页面中:http://azure.microsoft.com/en-us/pricing/details/websites/ http://azure.microsoft.com/en-us/pricing/details/websites/有一个说法:
按需、按计划运行自定义可执行文件和/或脚本,或者
持续作为网站实例中的后台任务。
连续执行 Web 作业需要始终开启。天蓝色
计划的 Web 作业需要 Scheduler Free 或 Standard。
因此我认为这是真的。事实上,Azure WebJobs 托管在 Azure 网站的 IIS 中。注意:WebJobs 可以连续且长时间运行。
然而,让我担心的是,执行长时间运行的进程/后台进程通常被视为反模式:
- 我可以使用线程在 IIS 上执行长时间运行的作业吗? https://stackoverflow.com/questions/536681/can-i-use-threads-to-carry-out-long-running-jobs-on-iis
- 对 IIS 上长时间运行的进程的担忧 https://stackoverflow.com/questions/13746411/concerns-with-long-running-process-on-iis
- ASP.NET 长时间运行的任务。线程正在中止异常 https://stackoverflow.com/questions/16254567/asp-net-long-running-task-thread-is-being-aborted-exception
那么 Microsoft Azure 是否提出了一些看似反模式的东西?附加问题:将 Quartz.NET 作为连续任务运行并进行“免费”简单的后台任务调度是一个好主意吗?
我将尝试分别解决你的两个问题。
1. WebJobs 托管在哪里?
给定的 WebJob 位于 Web 应用程序(或移动/API 应用程序)内。每个站点都有一个正在运行的 Kudu 实例,它管理部署、IIS 以及对我们来说很重要的 WebJobs 等内容。因此它托管在 Web 应用程序中,但不一定由 IIS 管理,它由管理 Web 应用程序 IIS 的同一事物管理。所有这些都可供您在Kudu GitHub https://github.com/projectkudu/kudu.
2. 它们作为长时间运行的进程安全吗?
它们与任何长时间运行的进程一样安全,因为它们不是单独运行的。如果您只是将控制台应用程序作为连续作业上传并使其在 while 循环中运行,则它可能会因任何原因随时崩溃。通过“Always On”,Kudu 将始终保持清醒状态并重新启动。
如果您想要一定程度的保证事情会被执行并且不会丢失,请尝试查看网络作业SDK https://github.com/Azure/azure-webjobs-sdk。它实际上会跟踪作业的失败/成功,并使用存储队列来跟踪历史记录,允许重试和正常模式进行处理,例如有毒消息等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)