.NET之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

2.永久存儲(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安裝: 

?
1
Install-Package Hangfire

在控制台應用程序或者window server中處理作業:

?
1
2
Install-Package Hangfire.Core
Install-Package Hangfire.SqlServer

注意,在控制台應用程序或者window server中不推薦直接安裝:Install-Package Hangfire ,因為它只是一個快速啟動軟件包,並包含您可能不需要的依賴項(例如,Microsoft.Owin.Host.SystemWeb等無關依賴項)。

使用MySQL作為存儲時我們需要安裝的NuGet:

 在ASP.NET 應用程序下使用Hangfire安裝: 

?
1
Install-Package Hangfire.Core

我們還需要安裝一個MySql存儲(Hangfire.MySqlStorage)的拓展,注意因為Hangfire本身是不支持MySQL存儲的,這是名為:Arnoldas Gudas作者拓展的

Nuget地址:https://www.nuget.org/packages/Hangfire.MySqlStorage/

安裝命令:

注意:因為我的項目是.NET Framework,Version=v4.5.1版本的,所以只能安裝1.0.7版本的,大家看需求而定

?
1
Install-Package Hangfire.MySqlStorage -Version 1.0.7

當我們要使用(宿主)IIS托管ASP.NET應用程序時,我們還需要安裝:

?
1
Install-Package Microsoft.Owin.Host.SystemWeb -Version 4.0.1

 

添加和配置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中連接需要使用的存儲庫:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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 name="sqlserver_connection" connectionString="Data Source=.;Initial Catalog=MyFirstDb;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

 

2.MySQL中:

<connectionStrings>
 <add name="mysql_connection" providerName="System.Data.MySqlClient" connectionString="Server=123.xxx.xxx.xx;Port=3306;Database=MyFirstDb;Uid=root;Pwd=youpassword;charset=utf8;SslMode=none;Allow User Variables=True" />
</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/

 

<div id="blog_post_info">
5
0
<div class="clear"></div>
<div id="post_next_prev">

<a href="https://www.cnblogs.com/Can-daydayup/p/11588531.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/Can-daydayup/p/11588531.html" title="發布於 2019-09-28 00:36">.NET Core使用NPOI導出復雜Word詳解</a>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM