2

在发布 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);
        }
    }
4

3 回答 3

3

你好呀!后台作业服务器实例现在(从 1.5.0-beta1 开始)为每个实例使用基于 GUID 的唯一标识符,因此无需设置任何神奇的服务器名称。

参考:https ://github.com/HangfireIO/Hangfire/issues/223

我的问题只是在hangfire 授权问题后被遗忘的代码行。

我只是忘了补充:

app.UseHangfireServer();

所以显然仪表板已初始化

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

但是服务器没有运行。

想出一个新的该死的问题(hangfire ...),所以要解决那个问题。

希望这可以帮助。

于 2015-11-17T22:59:58.230 回答
1

好的,现在为我工作。也许您的情况有类似的解决方案。从我对该问题的更新中转述:

我的问题特别是我在同一个应用程序池中运行多个应用程序,因此默认的“机器名:PID”命名方案不是唯一的。但是每个应用程序都指向自己独立的数据库。所以在启动/部署方面出现了一场竞赛,只有一个应用程序可以将单曲BackgroundJobServer视为自己的。但没有记录错误;一切看起来都很好。

答案在文档中:“由于默认值仅在进程级别提供唯一性,因此如果您想在同一进程中运行不同的服务器实例,您应该手动处理它”

但重要的一点是,这种情况包括在同一个应用程序池下运行的多个应用程序,这是一个单一的进程。

此外,当我尝试实施文档中建议的更改(设置唯一)时,由于此评论BackgroundJobServerOptions.ServerName中提到的 maxlength 问题,它出错了。我的解决方案是使用比 GUID 更短的东西来实现唯一性。就我而言,我使用了应用程序的名称。

于 2015-06-24T00:58:58.177 回答
1

这对我有帮助:在 OWIN 启动类中,我添加了带有 ServerName 的 BackgroundJobServerOptions:

var options = new BackgroundJobServerOptions
            {
                Queues = new[] { "critical", "default" },
                 ServerName = "Hangfire:1"
            };
于 2015-06-24T18:55:40.463 回答