2015-06-21 2 views
0

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

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

Такая же проблема здесь, с очень похожими настройками. 2 из 3 приложений (отдельные базы данных); один говорит, что в панели управления нет активных серверов, хотя в журналах log4net есть много успешных сообщений от Hangfire.BackgroundJobServer. – CrazyPyro

+0

Для этого есть старая открытая [проблема] (https://github.com/HangfireIO/Hangfire/issues/223), но похоже, что она может использовать некоторое внимание/помощь. – CrazyPyro

+0

ЭТО Помогло мне: var options = new BackgroundJobServerOptions { Queues = new [] {"critical", "default"}, ServerName = "Hangfire: 1" }; – WimmDeveloper

ответ

1

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

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

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

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

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

1

Это помогло мне: В классе Owin Startup Я добавил BackgroundJobServerOptions с ServerName:

var options = new BackgroundJobServerOptions 
      { 
       Queues = new[] { "critical", "default" }, 
       ServerName = "Hangfire:1" 
      }; 
+0

Мое исправление было таким, но только с именем сервера, заданным в строке по моему выбору. –

2

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

Ref: https://github.com/HangfireIO/Hangfire/issues/223

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

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

app.UseHangfireServer(); 

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

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

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

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

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

Смежные вопросы