Hangfire не имеет активных серверов
После публикации приложения ASP MVC Hangfire Dashboard сообщает, что у него нет активных серверов. Пробовал перезагружать, перестраивать, удалять таблицы Hangfire в БД - безуспешно. OWIN Startup класс:
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.MapSignalR();
GlobalConfiguration.Configuration
.UseSqlServerStorage(@"HangfireStorage");
var options = new BackgroundJobServerOptions
{
Queues = new[] { "critical", "default" }
};
app.UseHangfireServer(options);
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
AuthorizationFilters = new[] { new MyRestrictiveAuthorizationFilter() }
});
var hangfireUpdatingCron = ConfigurationManager.AppSettings["HangfireUpdatingPlayersCron"];
var hangfireUpdatingLeagueMatchesCron = ConfigurationManager.AppSettings["HangfireUpdatingLeagueMatchesCron"];
BackgroundJob.Enqueue(() => SteamParser.ResetAllUpdatings());
BackgroundJob.Enqueue(() => SteamParser.UpdateAllPlayers());
RecurringJob.AddOrUpdate(() => SteamParser.UpdateAllPlayers(), hangfireUpdatingCron);
RecurringJob.AddOrUpdate(() => SteamParser.UpdateLeagueMatches(), hangfireUpdatingLeagueMatchesCron);
}
}
3 ответа
Хорошо, работаю на меня сейчас. Возможно, ваша ситуация имеет аналогичное решение. Перефразируя мое обновление к этой проблеме:
В частности, моя проблема заключалась в том, что я запускал несколько приложений в одном и том же пуле приложений, поэтому схема именования по умолчанию "machinename:PID" не была уникальной. Но каждое приложение было указано на свою отдельную базу данных. Таким образом, произошла гонка при запуске / развертывании, и только одно из приложений получило право на BackgroundJobServer
как свой. Но ошибок не зарегистрировано; все выглядело хорошо.
Ответ в документах: "Поскольку значения по умолчанию обеспечивают уникальность только на уровне процесса, вам следует обрабатывать это вручную, если вы хотите запускать разные экземпляры сервера в одном и том же процессе"
Но важным моментом является то, что эта ситуация включает в себя несколько приложений, работающих в одном пуле приложений, который является одним процессом.
Кроме того, когда я пытался реализовать изменения, предложенные в документе (установка уникального BackgroundJobServerOptions.ServerName
), ошибка произошла из-за проблемы максимальной длины, упомянутой в этом комментарии. Моим решением было использовать что-то более короткое, чем GUID для уникальности. В моем случае я использовал имя приложения.
Всем привет! Экземпляры сервера фоновых заданий теперь (начиная с версии 1.5.0-бета1) используют уникальные идентификаторы на основе GUID для каждого экземпляра, поэтому нет необходимости задавать имена магических серверов.
Ссылка: https://github.com/HangfireIO/Hangfire/issues/223
Моя проблема была просто забытой строкой кода после проблемы авторизации с зависанием.
Я просто забыл добавить:
app.UseHangfireServer();
Итак, очевидно, приборная панель была инициализирована
app.UseHangfireDashboard('/hangfire', someOptions);
Однако сервер не работал.
Приходя с новой чертовой проблемой (Hangfire...), так что будем решать эту.
Надеюсь это поможет.
Это помогло мне: в классе запуска OWIN я добавил BackgroundJobServerOptions с ServerName:
var options = new BackgroundJobServerOptions
{
Queues = new[] { "critical", "default" },
ServerName = "Hangfire:1"
};