旧的 Hangfire 服务器不断恢复并且 运行 旧代码

Old Hangfire servers keep coming back and running old code

我在我的 .NET Core 2.2 Web 应用程序中使用 Hangfire.AspNetCore 版本 1.7.25 来执行后台作业。

我在 startup.cs ConfigureServices 方法中使用 services.AddHanfire 和 services.AddHangfireServer 设置,在 Configure 方法中使用 app.UseHangfireDashboard。

我在我的一个控制器中编写了代码,允许用户通过单击按钮来安排 Hangfire 作业。代码类似于以下内容:

var id = client.Schedule(() => Repository.MyJob(), TimeSpan.FromMinutes(1));

通常,当用户点击按钮时,MyJob() 代码首先被发送到 Hangfire Enqueue,然后几乎立即进入处理模式,并执行 MyJob() 代码。但是,最近,如果我更改我的代码并通过单击按钮执行作业,Hangfire 会忽略新代码并运行旧版本的代码,就好像它已缓存在某处一样。

我在仪表板上查看服务器时还注意到,Hangfire 不断创建“额外”或“旧”服务器以及新服务器。

我相信,虽然我不是 100% 肯定,但这些旧服务器是执行旧代码的原因。我在 Startup.cs 中编写了以下代码,以便在初始化 Hanfire 后立即删除任何现有服务器:

    IMonitoringApi monitoringApi = JobStorage.Current.GetMonitoringApi();
    foreach (var s in monitoringApi.Servers())
    {
        JobStorage.Current.GetConnection().RemoveServer(s.Name);
    }

上面的代码似乎确实有效,但是,几秒钟后,旧服务器会自动回到 Hangfire 仪表板的服务器列表中,并再次执行旧代码。

我在我的 Hangfire 设置中使用 SQL 存储,并且在执行我的应用程序之前我已经删除了我数据库中的所有 Hangfire 表,因此,允许 Hanfire 在重新添加时重新创建它们。我还通过从我的应用程序中删除 Hanfire 包并重建我的代码来删除对 Hanfire 的任何引用。我还清除了 Chrome 的缓存文件。关于此问题,我基本上已经尝试了在 Google 搜索中可以找到的所有内容,但我无法摆脱旧服务器或阻止 Hanfire 执行旧代码。

我知道我不是唯一遇到此问题的开发人员。有没有人找到解决这个问题的方法?有解决办法吗?我怎样才能摆脱那些旧服务器并阻止 Hanfire 执行旧代码?

如果有任何帮助,我将不胜感激。谢谢!

好的,这就是我做错的地方,导致我在 Hangfire 中获得“幽灵”服务器。基本上,我的应用程序 运行ning 有两个实例,但我什至没有意识到。我已经将我的应用程序部署到我们在 Azure 中使用 Azure 数据库的测试服务器。此测试应用程序也设置为“始终 运行”。现在,当我在我的开发机器上测试我对应用程序的更改时,我还连接到测试应用程序连接到的同一个 Azure 数据库。这就是为什么,即使我 t运行 设置了 Hangfire 表,“幽灵”服务器仍不断返回。这些服务器属于在 TEST 服务器上 运行ning 的应用程序,并且由于该应用程序始终处于 运行ning,因此服务器不断被重新创建,TEST 服务器上的旧代码一直在执行,因为我从未将更改从我的 DEV 服务器部署到 Azure 上的 TEST 服务器。

基本上,这是我自己的愚蠢错误。