我们有一个作为 Windows 服务运行的应用程序,我们正在迁移到 Azure。Windows 服务持续运行并在内部使用 Quartz 调度程序库来触发配置了 cron 表达式的不同作业。
Webjobs 看起来很适合在云中托管此应用程序,但由于 webjobs 已经具有“TimerTrigger”机制,与石英、cron exrpession 集相比,它也可以使用稍微不那么丰富但足够的机制,我们应该理想地删除石英完全来自系统,只需配置相同的“作业”即可运行为 Web 作业配置的触发器。Microsoft.Azure.WebJobs 和 Microsoft.Azure.WebJobs.Extensions 提供了足够的功能来执行此操作。到目前为止,一切都很好。
同时,迁移还需要一段时间,因为还有 50 个其他应用程序和设计变更需要解决。在此期间,应用程序将作为 Windows 服务在本地运行,并且在过渡期间,应该能够在本地和 Azure 中运行。
当我使用 webjobs 库时,我看到经验证据表明 Quartz 库可以完全删除,所有“作业”仅使用 webjobs 包中的“TimerTrigger”触发,使用 HostBuilder.ConfigureWebJobs 进行配置,如在 Microsoft 中使用所述。 Azure.WebJobs 3.0.14,同时这是一个 .net Framework 4.7.2 应用程序(可以使用 webjobs .net 标准库)。观察结果是:
- 它可以按预期在 Azure webjobs 中工作
- 它也可以作为 Windows 服务在 prem 上运行,运行正常,所有触发器都从 webjobs 包触发并正常执行作业。
Webjobs 文档或 nuget 包的文档没有讨论将包用于本地 Windows 服务托管的计时器触发作业,但它似乎工作正常。
我遇到了一个类似的讨论:在 Windows 服务和 Azure WebJob 之间利用单一代码库的方法,但要点是对本地和 Azure 使用两种不同的触发机制。我的测试表明,webjobs 库可以同时用于两者。任何
任何人都可以建议仅使用 webjobs 包在 prem 和 Azure 上工作是一种可行的方法,还是我还没有遇到过在 prem 上运行它的陷阱?