增加hangfire的重复作业轮询间隔并启用/禁用定期作业进程

时间:2016-12-27 08:02:34

标签: asp.net-mvc windows-services hangfire

我正在尝试使用hangfire创建后台处理器Windows服务。 我想将重复的作业轮询间隔增加到1分钟以上(默认情况下是硬编码的)。这样做的原因是重复轮询会影响数据库的性能 是否有可能启用/禁用hangfire重复出现的Job功能。如果安装了多个服务实例,则需要这样做。

1 个答案:

答案 0 :(得分:0)

在Hangfire中创建定期作业时,即使您有多个Hangfire服务器,该作业也不会同时在两台服务器上运行。

您可以使用Cron表达式来定义运行作业的频率,如Hangfire docs中所述:

RecurringJob.AddOrUpdate(() => YourJob(), "0 12 * */2");

但是,您需要避免在前一个实例仍在运行时触发作业。对于这种情况,我建议在作业开始时设置一个标志(例如在DB中),并在结束时将其删除。然后在实际开始处理之前检查标志是否存在。

更新

如你所说,你想阻止RecurringJobScheduler在某些服务器上运行,我已经查看了代码,似乎没有选择这样做。

您可以检查将调度程序添加到进程列表的文件BackgroundJobServer.cs和查询数据库的RecurringJobScheduler.cs。 1分钟的值是硬编码的,如注释中所指定的那样。

我认为您唯一的选择是您已经提出的拉取请求:(