Как заставить сервер hangfire удалить старые данные сервера для этого конкретного сервера при перезапуске? - PullRequest
0 голосов
/ 27 апреля 2018

Я показываю список серверов Hangfire, в данный момент работающих на моей странице.

Я запускаю сервер hangfire в консольном приложении, но проблема в том, что мое консольное приложение все еще не запущено. Hangfire api возвращает серверы hangfire.

Более того, когда я запускаю консольное приложение несколько раз, я получаю 3-4 сервера Hangfire, хотя в консольном приложении работает только 1 сервер Hangfire.

Применение Mvc:

IMonitoringApi monitoringApi = JobStorage.Current.GetMonitoringApi();
var servers = monitoringApi.Servers().OrderByDescending(s => s.StartedAt);

Консольное приложение: сервер 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();
    }
}

Сервер Hangfire автоматически удаляет старые данные сервера всякий раз, когда я снова запускаю консольное приложение для этого конкретного сервера?

Буду признателен за любую помощь:)

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Следуйте коду, чтобы удалить дубликаты на том же сервере.

        //Start Hangfire Server
        var varJobOptions = new BackgroundJobServerOptions();
        varJobOptions.ServerName = "job.fiscal.io";
        varJobOptions.WorkerCount = Environment.ProcessorCount * 10;
        app.UseHangfireServer(varJobOptions);
        app.UseHangfireDashboard("/jobs", new DashboardOptions {
            Authorization = new[] { new clsHangFireAuthFilter() }
        });
        //Remove Duplicte HangFire Server
        var varMonitoringApi = JobStorage.Current.GetMonitoringApi();
        var varServerList = varMonitoringApi.Servers().Where(r => r.Name.Contains("job.fiscal.io"));
        foreach( var varServerItem in varServerList) {
            JobStorage.Current.GetConnection().RemoveServer(varServerItem.Name);
        }
0 голосов
/ 02 мая 2018

Я копался в исходном коде, чтобы найти:

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

Если вы хотите увидеть код самостоятельно, вот соответствующие файлы исходного кода:

По последней ссылке также ясно, что вы можете настроить имя своего сервера, чтобы упростить его поиск и удаление:

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);
...