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"
            };
Другие вопросы по тегам