asp.net-core - 应用程序池回收后,Hangfire 重复作业停止
问题描述
我使用 .NET Core 附带的 Windows Hosting 模块在 IIS 下运行 ASP.NET Core API (v 2.2)。我在startup.cs 中配置了Hangfire,有几个重复的工作。
API 的应用程序池会因为不活动而定期回收。但是,只要应用程序池被回收(出于任何原因),重复作业就会停止运行,直到第一个用户调用 api。
Hangfire 文档有解决方案,但它特定于 Full .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
基于此处的讨论,我对应用程序池设置进行了更改
设置Regular Time Interval
为 0
我会等几天看看这个设置是如何工作的
但是,我不确定不回收应用程序池是否是个好主意?任何建议
解决方案
理想情况下,您应该遵循官方文档。
在您的情况下,您还应该将 Managed pipeline 模式设置为Integrated
,将 Start Mode 设置为Always Running
,将 Preload Enabled 设置为true
,并在 Configuration Editor 中进行一些编辑。
所有这些都在官方文档(上面链接)中提到并且更详细。
推荐阅读
- python - 使用python进行文本数据聚类
- graphql - 如何在同一张表上为 Amplify GraphQL Schema 建模多对多关系
- redis - Redis中修改对象的LUA脚本
- javascript - PHP 加密 -> IONIC 解密 = 截断字符串
- java - Hibernate 5.4.29 -> 本机查询需要标量?
- node.js - 我需要帮助来解释 NPM ERESOLVE 错误消息
- sql-server - 使用 SQOOP 将数据从 SQL Server 导入 HIVE
- angularfire - Angular 11 firebase 站点未启动
- laravel - Job 和命令的工作安排如何?
- javascript - 无法使用 sequelize 和 express 发布