ABP后台服务 - 集成Hangfire
7.2 ABP后台服务 - 集成Hangfire
7.2.1 简介
Hangfire是一个综合性的后台作业管理工具。你可以用Hangfire来替换ABP中默认实现的后台作业管理者。你可以对Hangfire使用相同的后台作业API。因此,你的代码将独立于Hangfire。但是,如果你喜欢,你也可以直接的使用 Hangfire 的API。
Hangfire的集成依赖于你所使用的框架。
7.2.2 ASP.NET Core集成
基于ASP.NET Core的应用程序,我们需要引用Abp.HangFire.AspNetCore包。它依赖于 Hangfire.AspNetCore。这个文档说明了安装hangfire到ASP.NET Core项目。它类似基于ABP的项目。首先需要在web项目中安装Abp.HangFire.AspNetCore:
Install-Package Abp.HangFire.AspNetCore
对于Hangfire你可以使用何类型的存储方式。最常用的一个方式是使用SQL Server 作为存储(请查询Hangfire.SqlServer)。在你安装完这些nuget包后,你可以配置你的项目来使用Hangfire。
首先,我们更改Startup类的 ConfigureServices 方法来添加Hangfire的依赖注入,并且配置存储方式以及连接字符串。
services.AddHangfire(config =>
{
config.UseSqlServerStorage(_appConfiguration.GetConnectionString("Default"));
});
然后我们可以在 Configure 方法中添加对UseHangfireServer的调用。
app.UseHangfireServer();
如果你想使用Hangfire的Dashboard,你也可这样做:
app.UseHangfireDashboard();
如果你想要授权认证dasboard,你可以像下面一样使用AbpHangfireAuthorizationFilter:
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new[] { new AbpHangfireAuthorizationFilter("MyHangFireDashboardPermissionName") }
});
上面的配置是集成hangfire到ASP.NET Core应用的标准配置。我们也应该配置web模块来替换ABP默认的后台工作管理器。
[DependsOn(typeof (AbpHangfireAspNetCoreModule))]
public class MyProjectWebModule : AbpModule
{
public override void PreInitialize()
{
Configuration.BackgroundJobs.UseHangfire();
}
//...
}
我们添加 AbpHangfireModule 作为依赖,并使用 Configuration.BackgroundJobs.UseHangfire 方法来替换ABP默认的后台工作管理器。
注意:Hangfire需要在数据库中有创建Schema的权限,因为在首次运行后,它会创建自己的架构和表。
详细请查阅HangFire文档。
7.2.3 ASP.NET MVC 5.X 集成
对于ASP.NET MVC 5.x 项目,我们可以使用 Abp.HangFire。
Install-Package Abp.HangFire
对于Hangfire你可以使用何类型的存储方式。最常用的一个方式是使用SQL Server 作为存储(请查询Hangfire.SqlServer)。在你安装完这些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需要在数据库中有创建Schema的权限,因为在首次运行后,它会创建自己的架构和表。
详细请查阅HangFire文档。
7.2.4 Hangfire Dashboard 授权
Hangfire可以显示一个 Dashboard 页面来查看所有后台工作的实时状态。你可以按照文档中描述的来配置。默认该页面对所有用户都是可用的,没有权限限制。使用Abp.HangFire包中的 AbpHangfireAuthorizationFilter 类,你可以集成它到ABP的权限认证系统。示例配置如下:
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new[] { new AbpHangfireAuthorizationFilter() }
});
这个可以检查当前用户是否登录到该应用。如果你想要一个额外的许可,你可以传递一个参数到它的构造函数:
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new[] { new AbpHangfireAuthorizationFilter("MyHangFireDashboardPermissionName") }
});
注意:在你的启动类的(可能是最后一行)授权中间件之后 UseHangfireDashboard 应该被调用,否则身份认证将会失败。