Hangfire集成
Hangfire是一個綜合的后台job管理器。你可以 把它集成到ABP,用來取代默認的后台job管理器。Hangfire可以使用相同的后台jobAPI。因此,你的代碼與Hangfire是獨立的。但是,如果你喜歡的話,可以直接使用Hangfire的API。
Hangfire集成依賴於使用的框架。
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文檔了解更多信息。
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類的授權中間件之后調用。否則,授權會總是失敗。