在Azure中正确使用Hangfire作业的方法

3
我正在我的Asp.Net Core Web API应用程序中使用Hang Fire,该应用程序部署在Azure应用服务中。我们需要运行一些CPU密集型和长时间运行的作业。创建一个不同的应用服务并部署完全新的项目来运行该应用服务中的作业是否可行?但是,这将连接到其他应用服务连接的同一数据库。这样做是否可以,或者会有问题?谢谢,Joe

1
根据你的问题不清楚是否要在独立的ASP.NET Core应用中运行,但是你不应该使用ASP.NET Core来完成这个任务。因为Web应用程序倾向于在任何时刻被IIS关闭(低资源、空闲、配置重载),即使设置了空闲时间也不能保证不会关闭。你应该使用后台任务(也称为WebJobs)来完成这个任务。 - Tseng
1个回答

2
如果您正在使用Hangfire从Web应用程序中安排作业,则Hangfire轮询器可能会使应用程序保持足够繁忙,以免空闲。如果失败,启用Always-On应该可以防止任何(非灾难性的)关闭,因此轮询器始终可以运行。
但是,如果您像我一样,您或您的客户希望应用程序在可以时自动停止。因此,您可以使用WebJobs或其他Azure平台调度和排队工具来安排任务,这些工具专为您的场景而设计。 WebJob可以触发由Hangfire仅管理持久性而不是调度的任务。托管任务代码可以存在于原始Web应用程序中。
换句话说,如果您正在创建单独的应用服务,因为您担心Web应用程序的可靠性,或者因为您认为这是最佳实践,我建议您不要费心。
另一方面,如果您知道您可以接受部署另一个应用服务的额外复杂性和潜在成本,并且您有自己的理由这样做,那么我认为这很好。使用单独的应用程序,您将能够重新启动或关闭其中一个而不会影响另一个。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接