-NET Job 任務組件 HangFire 詳解
目錄導航:
-
前言:
-
一、Hangfire 是什麼:
-
二、Hangfire 使用條件:
-
三、Hangfire 的基本特徵與優點:
-
四、Hangfire 安裝和使用:
-
運行成功,查看數據庫中是否生成了與 Hangfire 相關的表:
-
訪問調度控制面板:
-
添加 OWIN Startup.cs
-
什麼是 OWIN Startup.cs:
-
在 Startup.cs 中連接需要使用的存儲庫:
-
Web.config 數據庫連接配置:
-
使用 MS SQL Server 作爲存儲時我們需要安裝的 NuGet:
-
使用 MySQL 作爲存儲時我們需要安裝的 NuGet:
-
在 NuGet 上有關於 Hangfire 的 一系列軟件包:
-
通過在程序包管理控制檯中輸入安裝命令安裝 Hangfire 所需 NuGet 包:
-
添加和配置 OWIN Startup.cs,及其連接對應的存儲數據庫:
-
運行程序,訪問調度控制面板:
-
後臺常用任務調度創建和使用:
-
總結:
-
Hangfire 相關使用學習資料:
文章正文:
前言:
定時任務調度問題,是一個老生常談的問題。網上有許多定時任務調度的解決方案,對於我而言很早以前主要是使用 Window 計劃和 Window 服務來做任務定時執行,然後就開始使用定時任務調度框架 Quartz.Net。但是卻一直沒有上手過 Hangfire 這個自帶後臺任務調度面板,可以在後臺手動執行任務的神奇的任務調度框架。前段時間終於開始對他下手了,通過在網上查閱了一些資料和查看了 Hangfire 在 Github 中的 demo,終於在我自己的項目中用上了 Hangfire。在該篇文章中主要簡單介紹一下什麼是 Hangfire,Hangfire 的基本特徵與優點和分別使用 MySQL,MS SQL Server 作爲存儲使用。
一、Hangfire 是什麼:
Hangfire 是一個開源的. NET 任務調度框架,提供了內置集成化的控制檯,可以直觀明瞭的查看作業調度情況,並且 Hangfire 不需要依賴於單獨的應用程序執行(如:windows 服務,window 計劃)。並且支持持久性存儲。
二、Hangfire 使用條件:
Hangfire 與特定的. NET 應用程序類型無關。您可以在 ASP.NET Web 應用程序,非 ASP.NET Web 應用程序,控制檯應用程序或 Windows 服務中使用它。以下是要求:
1.NET Framework 4.5
- 永久存儲(Hangfire 將後臺作業和其他與處理有關的信息保留在永久性存儲器中,所以需要存儲庫來存儲如:MS SQL Server,Redis,MySQL,PostgreSql 等)
3.Newtonsoft.Json 庫≥5.0.1
三、Hangfire 的基本特徵與優點:
通過官網中的一張圖片便可知道它是一個多麼優秀的任務調度框架, 如下圖所示:
四、Hangfire 安裝和使用:
在 NuGet 上有關於 Hangfire 的 一系列軟件包:
詳情地址: https://www.nuget.org/packages?q=Hangfire
通過在程序包管理控制檯中輸入安裝命令安裝 Hangfire 所需 NuGet 包:
使用 MS SQL Server 作爲存儲時我們需要安裝的 NuGet:
在 ASP.NET 應用程序下使用 Hangfire 安裝:
在控制檯應用程序或者 window server 中處理作業:
注意,在控制檯應用程序或者 window server 中不推薦直接安裝:Install-Package Hangfire ,因爲它只是一個快速啓動軟件包,幷包含您可能不需要的依賴項(例如,Microsoft.Owin.Host.SystemWeb 等無關依賴項)。
使用 MySQL 作爲存儲時我們需要安裝的 NuGet:
在 ASP.NET 應用程序下使用 Hangfire 安裝:
我們還需要安裝一個 MySql 存儲(Hangfire.MySqlStorage)的拓展,注意因爲 Hangfire 本身是不支持 MySQL 存儲的,這是名爲:Arnoldas Gudas 作者拓展的:
Nuget 地址:https://www.nuget.org/packages/Hangfire.MySqlStorage/
安裝命令:
注意:因爲我的項目是. NET Framework,Version=v4.5.1 版本的,所以只能安裝 1.0.7 版本的,大家看需求而定
當我們要使用 (宿主)IIS 託管 ASP.NET 應用程序時,我們還需要安裝:
添加和配置 OWIN Startup.cs,及其連接對應的存儲數據庫:
添加 OWIN Startup.cs
這裏是當你的項目中不存在 Startup.cs 時才需要執行添加的操作!
什麼是 OWIN Startup.cs:
簡單概述:是. NET 平臺開放的 web 接口,Startup 則是. Net 與 web 通訊管道,起到轉發,溝通的作用。
詳情介紹:https://www.cnblogs.com/wj033/p/6065145.html
在 Startup.cs 中連接需要使用的存儲庫:
public
void
Configuration(IAppBuilder app)
{
//運用SqlServer存儲,對應web.config中的connectionStrings中的name
GlobalConfiguration.Configuration.UseSqlServerStorage(``"sqlserver_connection"``);<br>
//注意,當你使用的是MySql作爲存儲時,需要如下配置
//運用MySql存儲,對應web.config中的connectionStrings中的name
GlobalConfiguration.Configuration.UseStorage(``new
MySqlStorage(``"mysql_connection"``));
app.UseHangfireDashboard();``//配置後臺儀表盤
app.UseHangfireServer();``//開始使用Hangfire服務
}
Web.config 數據庫連接配置:
1.MS SQL Server 中:
<connectionStrings>
<add />
</connectionStrings>
2.MySQL 中:
<connectionStrings>
<add />
</connectionStrings>
運行程序,訪問調度控制面板:
當我們已經完成了上面的相關配置後,且程序能夠正常無 bug 的運行時,我們的 Hangfire Dashboard(儀表盤) 在我們的本地就可以正常訪問了(Hangfire 儀表盤默認只支持本地訪問),假如需要遠程可訪問的話我們還需要做對應的配置授權操作!
運行成功,查看數據庫中是否生成了與 Hangfire 相關的表:
首次運行成功後,打開數據庫可以看到 Hangfire 已經自動爲我們創建了定時任務的一些定時任務列表,定時隊列,服務,狀態等相關的數據表(展現了 Hangfire 作用的持久化特性),如下圖所示:
a.MS SQL Server 中生成的表:
** b.MySQL 中生成的表:**
訪問調度控制面板:
本地訪問方式:https://localhost: 端口號 / hangfire/
調度控制面板效果圖:
後臺常用任務調度創建和使用:
//支持基於隊列的任務處理:任務執行不是同步的,而是放到一個持久化隊列中,以便馬上把請求控制權返回給調用者。
var jobId = BackgroundJob.Enqueue(() => WriteLog("隊列任務"));
//延遲任務執行:不是馬上調用方法,而是設定一個未來時間點再來執行,延遲作業僅執行一次
var jobId = BackgroundJob .Schedule(()=> Console .WriteLine(""),TimeSpan .FromDays(1));//一天後執行該任務
//循環任務執行:一行代碼添加重複執行的任務,其內置了常見的時間循環模式,也可基於CRON表達式來設定複雜的模式。【用的比較的多】
RecurringJob.AddOrUpdate(() => WriteLog("每分鐘執行任務"), Cron.Minutely); //注意最小單位是分鐘
//延續性任務執行:類似於.NET中的Task,可以在第一個任務執行完之後緊接着再次執行另外的任務
BackgroundJob.ContinueWith(jobId, () => WriteLog("連續任務"));
總結:
通過本次項目實踐的確讓我感受到了 Hangfire 的魅力所在,真的可以說是上手簡單,開箱即用的一個任務調度框架。並且該框架做的最好的是,官方文檔詳細,並且還提供了完整的 demo 示例。最後要爲 Hangfire 的作者點贊!
Hangfire 相關使用學習資料:
官網地址:https://www.hangfire.io/
GitHub 源碼:https://github.com/HangfireIO/Hangfire
中文文檔:https://www.bookstack.cn/read/Hangfire-zh-official/README.md
GitHub 使用示例源碼:https://github.com/HangfireIO/Hangfire.Samples(包括控制檯應用程序,window 服務,ASP.NET MVC,WebForm)
Hangfire 使用文章彙總:https://www.bbsmax.com/R/xl56E0nrJr/
出處:https://www.cnblogs.com/owenzh/p/11623869.html
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/xX8AhTcvIDGphphREjkYBg