Hangfire集成
- 介绍
- ASP.NET Core集成
- ASP.NET MVC 5.x集成
- 面板授权
介绍
Hangfire是一个综合的后台job管理器。你可以 把它集成到ABP,用来取代默认的后台job管理器。Hangfire可以使用相同的后台jobAPI。因此,你的代码与Hangfire是独立的。但是,如果你喜欢的话,可以直接使用Hangfire的API。
Hangfire集成依赖于使用的框架。
ASP.NET Core集成
Abp.HangFire.AspNetCore包用来集成到ASP.NET Core基础应用程序。它依赖于Hangfire.AspNetCore。这个文档描述了如何在ASP.NET Core工程中安装Hangfire。它和ABP基础工程相似。首先,在你的工程中安装Abp.HangFire.AspNetCore包:
Install-Package Abp.HangFire.AspNetCore
然后你可以为hangfire安装任何仓储。最常见的为SQL Server仓储(参见Hangfire.SqlServer nuget包),当你安装完这些nuget包之后,就可以配置你的工程使用Hangfire了。
首先,我们修改Startup类,在ConfigureServices方法中将Hangfire添加到依赖注入系统并配置仓储、连接字符串:
services.AddHangfire(config => { config.UseSqlServerStorage(_appConfiguration.GetConnectionString("Default")); });
然后,我们可以在Configure方法中添加UserHangfireServer调用:
app.UseHangfireServer();
如果你想使用hangfire的面板,可以添加它:
app.UseHangfireDashboard();
如果你想授权面板,你可以按如下所示使用AbpHangfireAuthorizationFilter:
app.UseHangfireDashboard("/hangfire", new DashboardOptions { Authorization = new[] { new AbpHangfireAuthorizationFilter("MyHangFireDashboardPermissionName") } });
上面的配置基本上为ASP.NET Core应用程序集成hangfire的标准。对于ABP基础工程,也可以配置我们的web模块使用Hangfire取代ABP默认的后台job管理器:
[DependsOn(typeof (AbpHangfireAspNetCoreModule))] public class MyProjectWebModule : AbpModule { public override void PreInitialize() { Configuration.BackgroundJobs.UseHangfire(); } //... }
我们添加AbpHangfireAspNetCoreModule作为依赖并使用Configuration.BackgroundJobs.UseHangfire方法使用Hangfire取代ABP的默认后台job管理器。
Hangfire需要数据库的模式创建权限,因为首次运行时它会创建自己的模式和表。参见Hangfire文档了解更多信息。
ASP.NET MVC 5.x集成
Abp.HangFire nuget包用于ASP.NET MVC 5.x工程:
Install-Package Abp.HangFire
然后,你可以为Hangfire安装任何仓储。一般使用SQLServer仓储(参见Hangfire.SqlServer nuget包)。当你安装完这些nuget包之后,可以按如下配置你的工程来使用Hangfire:
[DependsOn(typeof (AbpHangfireModule))] public class MyProjectWebModule : AbpModule { public override void PreInitialize() { Configuration.BackgroundJobs.UseHangfire(configuration => { configuration.GlobalConfiguration.UseSqlServerStorage("Default"); }); } //... }
我们添加AbpHangfireModule作为依赖并使用Configuration.BackgroundJobs.UseHangfire方法来启用和配置Hangfire("Default"是web.config中的默认连接字符串)。
Hangfire需要数据库的模式创建权限,因为首次执行时它会创建自己的模式和表。参见Hangfire文档了解更多信息。
面板授权
Hangfire可以显示一个面板实时的显示所有后台job的状态。你可以参照它的文档来配置它。默认,面板页对所有的客户可用,无需授权。你可以集成它到ABP的授权系统,然后使用定义在Abp.HangFire包的AbpHangfireAuthorizationFilter类。示例配置:
app.UseHangfireDashboard("/hangfire", new DashboardOptions { Authorization = new[] { new AbpHangfireAuthorizationFilter() } });
这会检查当前用户是否登录。如果你想需要一个额外的权限,可以传递给他的构造函数:
app.UseHangfireDashboard("/hangfire", new DashboardOptions { Authorization = new[] { new AbpHangfireAuthorizationFilter("MyHangFireDashboardPermissionName") } });
注意:UseHangfireDashboard需要在Startup类的授权中间件之后调用。否则,授权会总是失败。