【问题标题】:Remove a hangfire job without instantiating a hangfire server在不实例化hangfire服务器的情况下删除hangfire作业
【发布时间】:2016-11-11 04:51:33
【问题描述】:

我有 2 个独立的应用程序。一个人使用 HangFire 并安排一个重复的工作。另一个包含测试。测试是集成的,因此它们重用实际路径而不模拟任何东西。两个应用都可以访问同一个数据库

作为运行测试的结果,会出现一个由第一个应用创建的重复作业,这是可取的。但是,由于测试是集成的 - 它在生产数据库上运行,所以在测试完成后,我想删除创建的重复作业。我想在测试中处理删除。

我想知道我是否可以在第二个应用程序中配置 hangfire 类,这将允许我删除由第一个应用程序创建的重复作业。

如果我只是简单地将hangfire 配置为在第二个应用程序中使用相同的SQL 服务器,那么将实例化一个新的HangFireServer,它将开始“抓取”作业以执行。

我可以运行 SQL 查询来删除作业,但我想避免这种情况。

我希望我解释得足够清楚。

【问题讨论】:

    标签: c# asp.net hangfire


    【解决方案1】:

    在 Hangfire 中,您可以删除/添加作业,无论它是重复作业还是后台作业,只要您先填充 JobStorage。

    可能有两种设置方法。

    JobStorage.Current = new SqlServerStorage("Your ConnectionString");; 
    

    GlobalConfiguration.Configuration.UseSqlServerStorage("Your ConnectionString");
    

    然后您现在可以使用您的RecurringJob.RemoveIfExists("id") 并且无需实例化 Hangfire 服务器。假设您已经在其他应用程序中创建了 Hangfire Scheme。

    【讨论】:

    • 这正是我想要的。谢谢!
    【解决方案2】:

    假设您使用 id 创建了定期作业,您可以执行 RecurringJob.RemoveIfExists("id"),如文档页面所述:http://docs.hangfire.io/en/latest/background-methods/performing-recurrent-tasks.html

    【讨论】:

    • 是的,我知道身份证。您链接的内容无法回答我的问题。我不知道如何在第二个应用程序中配置 HangFire,所以它不会做任何事情,但同时允许我使用 RecurringJob.RemoveIfExists("id")
    • 您是否使用数据库来存储您的工作?因为我认为您可以只引用 Hangfire,使用正确的数据库对其进行配置并删除该作业。您可以考虑将 Hangfire 包装在一个库中,然后在任何您想使用它的地方使用它。
    • 正如我在问题中指定的那样 - 是的,我确实使用了 db。并且这两个应用程序都可以访问该数据库。你是说如果我写下GlobalConfiguration.Configuration .UseSqlServerStorage(connectionString);,如果我不会app.UseHangfireServer();,那么我仍然可以删除工作吗?
    • 抱歉回复晚了 - 很高兴你知道了 :)
    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多