Asp.net core 在azure中使用Hangfire作业的正确方法

Asp.net core 在azure中使用Hangfire作业的正确方法,asp.net-core,hangfire,Asp.net Core,Hangfire,我在部署在azure应用程序服务中的Asp.Net核心web API应用程序中使用了Hang Fire 我们需要运行几个CPU密集型和长时间运行的作业。可以创建一个不同的应用程序服务并部署一个全新的项目来运行该应用程序服务中的作业吗?但它将连接到另一个应用程序服务所连接的同一个数据库。这可以吗,还是会成为一个问题 谢谢, Joe如果您正在使用Hangfire从web应用程序中调度作业,Hangfire轮询器可能会让应用程序保持足够的繁忙状态,从而永远不会空闲。如果不能做到这一点,则启用“总是在任

我在部署在azure应用程序服务中的Asp.Net核心web API应用程序中使用了Hang Fire

我们需要运行几个CPU密集型和长时间运行的作业。可以创建一个不同的应用程序服务并部署一个全新的项目来运行该应用程序服务中的作业吗?但它将连接到另一个应用程序服务所连接的同一个数据库。这可以吗,还是会成为一个问题

谢谢,
Joe

如果您正在使用Hangfire从web应用程序中调度作业,Hangfire轮询器可能会让应用程序保持足够的繁忙状态,从而永远不会空闲。如果不能做到这一点,则启用“总是在任何(非灾难性)停机”功能,以便轮询器始终可以运行

但是,如果你和我一样,你或你的客户希望应用程序在可能的时候减速。因此,您可以使用WebJobs或其他Azure平台调度和排队工具来调度任务,这些工具仅适用于您的场景。WebJob可以触发Hangfire管理的任务,该任务仅用于持久性,而不用于调度。托管任务代码可以存在于原始web应用中

换句话说,如果你创建一个单独的应用程序服务是因为你担心你的web应用程序的可靠性,或者因为你认为这是一个最佳实践,我会说不要麻烦


另一方面,如果你知道你对部署另一个应用程序服务增加的复杂性和潜在成本没有意见,并且你有这样做的理由,我认为这很好。使用单独的应用程序,您可以在不关闭另一个应用程序的情况下重新启动或关闭其中一个应用程序。

如果您使用Hangfire在web应用程序中调度作业,Hangfire轮询器可能会使应用程序保持足够的繁忙状态,从而永远不会空闲。如果不能做到这一点,则启用“总是在任何(非灾难性)停机”功能,以便轮询器始终可以运行

但是,如果你和我一样,你或你的客户希望应用程序在可能的时候减速。因此,您可以使用WebJobs或其他Azure平台调度和排队工具来调度任务,这些工具仅适用于您的场景。WebJob可以触发Hangfire管理的任务,该任务仅用于持久性,而不用于调度。托管任务代码可以存在于原始web应用中

换句话说,如果你创建一个单独的应用程序服务是因为你担心你的web应用程序的可靠性,或者因为你认为这是一个最佳实践,我会说不要麻烦


另一方面,如果你知道你对部署另一个应用程序服务增加的复杂性和潜在成本没有意见,并且你有这样做的理由,我认为这很好。使用单独的应用程序,您可以在不关闭另一个应用程序的情况下重新启动或关闭其中一个应用程序。

您不应该为此使用ASP.NET Core(您的问题中不清楚您是否打算在自己的ASP.NET Core应用程序中运行它),因为IIS往往会在任何时候关闭/关闭web应用程序(资源不足、空闲、配置重新加载),即使设置空闲时间,也无法保证。您应该使用后台任务(也称为WebJobs)来完成此任务您不应该使用ASP.NET Core来完成此任务(您的问题中不清楚您是否打算在自己的ASP.NET Core应用程序中运行它),因为web应用程序往往会在任何时候(低资源、空闲、配置重新加载)被IIS关闭/关闭,即使设置空闲时间,也无法保证。对此,您应该使用后台任务(也称为WebJobs)