应用程序池回收后,Hangfire 重复作业停止

Posted

技术标签:

【中文标题】应用程序池回收后,Hangfire 重复作业停止【英文标题】:Hangfire recurring job stops after app pool gets recycle 【发布时间】:2019-11-22 10:31:22 【问题描述】:

我使用 .NET Core 附带的 Windows Hosting 模块在 IIS 下运行 ASP.NET Core API (v 2.2)。我在startup.cs 中配置了Hangfire,有几个重复的工作。

API 的应用程序池会因为不活动而定期回收。但是,只要应用程序池被回收(出于任何原因),重复作业就会停止运行,直到第一个用户调用 api。

Hangfire documentation 有解决方案,但它特定于完整的 .NET,它可能不适用于 .NET Core。

我找到的解决方案之一是在控制台应用程序中运行重复作业,但随后我必须创建和维护另外一个应用程序。此外,除了重复作业之外,API 在内部创建后台作业以进行单向调用。例如

[HttpPost]
public IActionResult DoWork(int id)

    BackgroundJob.Enqueue<IWorkerService>(x => x.DoWork(id));

因此,如果我仅为重复作业创建控制台应用程序,我仍然需要在 API 中为后台作业配置 Hangfire。我试图避免在两个地方配置 Hangfire。

在 ASP.NET Core 中有哪些选项可以让 API 始终运行?

更新 1 基于讨论here我对应用程序池设置进行了更改

Regular Time Interval 设置为 0

Idle Time-Out 从默认的 20 更改为 0

我会等几天看看这个设置是如何工作的

但是,我不确定永远不要回收应用程序池是否是个好主意?任何建议

【问题讨论】:

【参考方案1】:

理想情况下,您应该关注official docs。

在您的情况下,您还应该将托管管道模式设置为Integrated,将启动模式设置为Always Running,将启用的预加载设置为true,并在配置编辑器中进行一些编辑。

所有这些都在官方文档(上面链接)中提到并且更详细。

【讨论】:

以上是关于应用程序池回收后,Hangfire 重复作业停止的主要内容,如果未能解决你的问题,请参考以下文章

HangFire循环作业中作业因执行时间太长未完成新作业开启导致重复数据的问题...

HangFire循环作业中作业因执行时间太长未完成新作业开启导致重复数据的问题...

Hangfire循环任务20分钟后停止,是啥原因

IIS 应用程序池 - 停止/启动与回收

如何访问失败的Hangfire作业

IIS应用程序池自动回收作业