Hangfire не имеет активных серверов

После публикации приложения ASP MVC Hangfire Dashboard сообщает, что у него нет активных серверов. Пробовал перезапускать, пересобирать, удалять таблицы Hangfire в БД - безуспешно. Класс запуска OWIN:

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

person egorgrushin    schedule 21.06.2015    source источник
comment
Та же проблема здесь, с очень похожей настройкой. 2 из 3 приложений (отдельные базы данных) работают; один говорит, что на панели инструментов нет активных серверов, хотя в журналах log4net есть много успешных сообщений от Hangfire.BackgroundJobServer.   -  person CrazyPyro    schedule 23.06.2015
comment
Для этого существует старая открытая проблема, но похоже, что ей стоит уделить внимание/ помощь.   -  person CrazyPyro    schedule 23.06.2015
comment
ЭТО помогло мне: var options = new BackgroundJobServerOptions {Queues = new[] {critical, default}, ServerName = Hangfire:1};   -  person egorgrushin    schedule 24.06.2015


Ответы (3)


Хорошо, теперь работай на меня. Возможно, в вашей ситуации есть похожее решение. Перефразируя мое обновление к этой проблеме:

Моя проблема заключалась именно в том, что я запускал несколько приложений в одном и том же пуле приложений, поэтому схема именования по умолчанию «имя машины: PID» не была уникальной. Но каждое приложение было указано на свою отдельную базу данных. Таким образом, была гонка при запуске/развертывании, и только одно из приложений могло претендовать на единственное BackgroundJobServer как на свое собственное. Но ошибок не зарегистрировано; все выглядело нормально.

Ответ находится в документах: «Поскольку значения по умолчанию обеспечивают уникальность только на уровне процесса, вам следует обрабатывать это вручную, если вы хотите запускать разные экземпляры сервера внутри одного процесса»

Но важным моментом является то, что эта ситуация включает несколько приложений, работающих в одном и том же пуле приложений, который является единым процессом.

Кроме того, когда я попытался реализовать изменение, предложенное в документе (установка уникального BackgroundJobServerOptions.ServerName), произошла ошибка из-за проблемы с максимальной длиной, упомянутой в этот комментарий. Мое решение состояло в том, чтобы использовать что-то более короткое, чем GUID, для уникальности. В моем случае я использовал имя приложения.

person CrazyPyro    schedule 24.06.2015

Всем привет! Экземпляры фонового сервера заданий теперь (начиная с версии 1.5.0-beta1) используют уникальные идентификаторы на основе GUID для каждого экземпляра, поэтому нет необходимости задавать какие-либо магические имена серверов.

Ссылка: https://github.com/HangfireIO/Hangfire/issues/223

Моя проблема была просто забытой строкой кода после проблемы с авторизацией в Hangfire.

Я просто забыл добавить:

app.UseHangfireServer();

Итак, очевидно, приборная панель была инициализирована

app.UseHangfireDashboard('/hangfire', someOptions);

Однако сервер не работал.

Придумал новую чертову проблему (зависание...), так что возьмусь за нее.

Надеюсь это поможет.

person Kickass    schedule 17.11.2015

Это помогло мне: в классе запуска OWIN я добавил BackgroundJobServerOptions с именем сервера:

var options = new BackgroundJobServerOptions
            {
                Queues = new[] { "critical", "default" },
                 ServerName = "Hangfire:1"
            };
person egorgrushin    schedule 24.06.2015
comment
Мое исправление было таким, но только с именем сервера, установленным в строку по моему выбору. - person Stafford Williams; 24.08.2015