【发布时间】:2016-12-30 17:58:04
【问题描述】:
我正在尝试使用 hangfire 创建后台处理器 Windows 服务。
我想将循环作业轮询间隔增加到 1 分钟以上(默认为硬编码)。这样做的原因是重复轮询会影响数据库的性能。
是否有可能启用/禁用 hangfire 重复作业功能。如果安装了多个服务实例,则需要这样做。
【问题讨论】:
标签: asp.net-mvc windows-services hangfire
我正在尝试使用 hangfire 创建后台处理器 Windows 服务。
我想将循环作业轮询间隔增加到 1 分钟以上(默认为硬编码)。这样做的原因是重复轮询会影响数据库的性能。
是否有可能启用/禁用 hangfire 重复作业功能。如果安装了多个服务实例,则需要这样做。
【问题讨论】:
标签: asp.net-mvc windows-services hangfire
当您在 Hangfire 中创建循环作业时,即使您有多个 Hangfire 服务器,该作业也不会同时在两台服务器上运行。
您可以使用 Cron 表达式来定义运行作业的频率,如 Hangfire docs 中所述:
RecurringJob.AddOrUpdate(() => YourJob(), "0 12 * */2");
但是,您可能需要避免在前一个实例仍在运行时触发作业。对于这种情况,我建议您在工作开始时设置一个标志(例如在数据库中),并在工作结束时将其删除。然后在实际开始进程之前检查标志是否存在。
正如您所说,您希望阻止 RecurringJobScheduler 在某些服务器上运行,我已经查看了代码,似乎没有这样做的选项。
您可以查看文件BackgroundJobServer.cs,其中将调度程序添加到进程列表中,以及查询数据库的RecurringJobScheduler.cs。 1 分钟的值是硬编码的,在 cmets 中指定。
我认为您唯一的选择是您已经提出的拉取请求:(
【讨论】: