【问题标题】:Hangfire recurring jobs - how to dynamically change the intervalHangfire 重复作业 - 如何动态更改间隔
【发布时间】:2021-01-28 14:02:18
【问题描述】:

我有一个 .NET Web 应用程序,它使用 Hangfire 执行一些重复性工作。我想构建功能,以便用户可以通过应用程序更改作业的间隔。但似乎“更新”不起作用。

我已将 Startup.cs 配置为在应用程序运行时启动作业:

public void Configuration(IAppBuilder app)
{
    app.UseHangfireAspNet(GetHangfireServers);

    //Admin user can view job dashboard
    app.UseHangfireDashboard("/jobs", new DashboardOptions
    {
        Authorization = new[] { new JobsAuthorizationFilter() }
    });

    app.UseHangfireServer();

          
    RecurringJob.AddOrUpdate("my-job-id", () => FileProcess.GetOrders(), interval); //interval is a parameter and its initial values is * * * * * which sets the job to run every minute
}

现在在控制器中,当用户点击更新按钮时会调用此方法。

public ActionResult JobUpdate(string newInterval)
{
     var manager = new RecurringJobManager();
     manager.  RecurringJob.AddOrUpdate("my-job-id", () => FileProcess.GetOrders(), newInterval);           

     return new EmptyResult();
}

但似乎工作没有更新。我仔细检查了 Hangfire.Hash 表,这个作业的 Cron 值根本没有改变。

我也试过删除作业,然后重新添加,也没有用

public ActionResult JobUpdate(string newInterval)
{
     var manager = new RecurringJobManager();
     manager.RemoveIfExists("my-job-id");
     manager.AddOrUpdate("my-job-id", () => FileProcess.GetOrders(), newInterval);   
     manager.Trigger("my-job-id");
}    

我错过了什么?如何获取用户设置和更新的时间间隔?

【问题讨论】:

  • 您是否尝试过配置方法中的静态方法,而不是从那里创建新的 RecurringJobManager 和调用方法?
  • 是的,两者都应该工作。事实证明这不是 Hangfire 的问题。我已经更新了答案。谢谢。

标签: .net hangfire hangfire-sql


【解决方案1】:

原来导致我的方法没有被更新的问题是“间隔”参数。因为我使用缓存来缓存这个值,所以旧值只有在一定时间后才会过期。这就是为什么它没有得到更新。我删除了缓存,现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 2019-12-25
    • 2017-03-09
    • 2016-12-23
    • 1970-01-01
    • 2019-04-28
    • 2018-02-23
    • 1970-01-01
    相关资源
    最近更新 更多