Как заставить сервер hangfire удалить старые данные сервера для этого конкретного сервера при перезапуске?
Я показываю список серверов 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 автоматически удаляет старые данные сервера, когда я снова запускаю консольное приложение для этого конкретного сервера?
Буду признателен за любую помощь:)
1 ответ
Я копался в исходном коде, чтобы найти:
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);
Следуйте коду, чтобы удалить дубликаты на том же сервере.
//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);
}