如何强制hangfire服务器在重新启动时删除该特定服务器的旧服务器数据?

ILo*_*low 10 c# hangfire hangfire-console

我正在显示当前在我的页面上运行的hangfire服务器列表.

我在控制台应用程序中运行hangfire服务器,但问题是当我没有运行我的控制台应用程序仍然hangfire api返回hangfire服务器.

此外,当我跑我的控制台应用程序多次,我得到3-4迟发型服务器虽然我只有1迟发型服务器控制台应用程序运行.

Mvc申请:

IMonitoringApi monitoringApi = JobStorage.Current.GetMonitoringApi();
var servers = monitoringApi.Servers().OrderByDescending(s => s.StartedAt);
Run Code Online (Sandbox Code Playgroud)

控制台应用程序:Hangfire服务器

public static void Main(string[] args)
{
    var sqlServerPolling = new SqlServerStorageOptions
    {
        QueuePollInterval = TimeSpan.FromSeconds(20) // Default value
    };
    GlobalConfiguration.Configuration.UseSqlServerStorage("ConnectionString", sqlServerPolling);

    // Set automatic retry attempt
    GlobalJobFilters.Filters.Add(new AutomaticRetryAttribute { Attempts = 0 });

    // Set worker count
    var options = new BackgroundJobServerOptions
    {
        WorkerCount = 1,
    };
    using (var server = new BackgroundJobServer(options))
    {
        Console.WriteLine("Hangfire Server1 started. Press any key to exit...");
        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

每当我为该特定服务器再次运行我的控制台应用程序时,Hangfire服务器会自动删除旧服务器数据吗?

我会感激任何帮助:)

cae*_*say 7

我挖掘了源代码,找到:

IMonitoringApi monitoringApi = JobStorage.Current.GetMonitoringApi();
var serverToRemove = monitoringApi.Servers().First(); //<-- adjust query as needed
JobStorage.Current.GetConnection().RemoveServer(serverToRemove.Name)
Run Code Online (Sandbox Code Playgroud)

如果您想亲自查看代码,请参阅相关的源代码文件:

通过最后一个链接,您还可以自定义服务器名称,以便于查找和删除:

var options = new BackgroundJobServerOptions
{
    WorkerCount = 1,
    ServerName = "removeMe",
};
// ....
IMonitoringApi monitoringApi = JobStorage.Current.GetMonitoringApi();
var serverToRemove = monitoringApi.Servers().First(svr => srv.Name.Contains("removeMe"));
JobStorage.Current.GetConnection().RemoveServer(serverToRemove.Name);
Run Code Online (Sandbox Code Playgroud)