Hangfire 排程套件安裝

https://www.hangfire.io/

Nick Chi
T&X_FIRE
Sep 24, 2019

--

Hangfire簡介

可以很方便的用來執行backgroud job,不需要額外的windows service。支援幾種類型的job

  • Fire-and-forgot jobs: 站台啟動後自動執行一次
  • Delayed jobs: 可設定時間區間,每間格時間區間執行一次
  • Recurring jobs: 可設定Cron敘述,並重複執行多次
  • Continuations: 在某個job執行完後接續執行

這裡會介紹兩種方式:

第一種: Hangfire的排程的工作任務會存放在MemoryStorage

第二種: Hangfire的排程的工作任務會存放在 SQLite

第一步:到NUGET安裝 Hangfire.MemoryStorage套件

或者 PM> Install-Package Hangfire.MemoryStorage

第二步:到NUGET安裝 Microsoft.Owin.Host.SystemWeb套件

PM> Install-Package Microsoft.Owin.Host.SystemWeb

第三步: 在專案加入Owin Startup class(注意,檔案名稱請改為Startup.cs而不是預設的Startup1.cs),並在裡面加入:

只需要將 Configuration內容複製貼上,並且將 hangfireTest改成專案名稱

[assembly: OwinStartup(typeof(專案名稱.Startup))]

第四步:執行專案

只需在網址後面加入/hangfire/就可以查看排程

https://localhost:44375/hangfire/

可以撰寫API來測試一下,上述四種backgroud job方法

當在Control裡面新增WebAPI的時候會跳出一個說明文件

Visual Studio 已將 ASP.NET Web API 2 的 整組 相依性新增至專案 'hangfireTest'。專案中的 Global.asax.cs 檔案需要其他變更,才能啟用 ASP.NET Web API。1. 新增下列命名空間參考:using System.Web.Http;using System.Web.Routing;2. 如果程式碼尚未定義 Application_Start 方法,請新增下列方法:protected void Application_Start(){}3. 將以下幾行新增至 Application_Start 方法的開頭處:GlobalConfiguration.Configure(WebApiConfig.Register);

因此我們必須將Global.asax.cs先做修正

特別注意GlobalConfiguration.Configure(WebApiConfig.Register);

必須放在開頭處

方法一: 站台啟動後自動執行一次

這裡假設Send()方法是一個需要長時間處理的工作,透過BackgroundJob.Enqueue()把此任務送到背景去處理。你能發現,此方法會立即回應你Http 200狀態碼,並不會造成鎖定。

筆者用Fiddler同時間打超過1000筆請求(任務)進去,Hangfire都能秒殺且輕鬆完成。(註,這是在本機打,所以特別快:D)

方法二: 可設定時間區間,每間格時間區間執行一次

BackgroundJob.Schedule()就是希望目前的任務延後執行,不過注意,以範例來說,我會得到兩個訊息,兩個訊息前後差3秒,但輸出的訊息時間會是一樣。也就是說,DateTime.Now在送入背景等待時就已經執行完畢,而不是3秒後才被執行。

方法三: Recurring jobs: 可設定Cron敘述,並重複執行多次

RecurringJob.AddOrUpdate()是重頭戲,也就是我們以前我們在網頁上難以處理的定時排程的處理,Cron關鍵字如果你有玩過Linux的人應該都很熟悉,可以設置:分、小時、日、週、月、年。如果要更進一步的設置詳細時間,可以透過方法的多載來設定,例如:Daily(int hour, int minute);可設定每天的幾點幾分來定時觸發。如果你習慣Cron表示式(CRON expressions),例如:"0 12 * */2",Hangfire也支援。

也可以進入此網站看Cron表示式定義

參考文章:

  1. https://bryanyu.github.io/2018/09/03/Hangfire01/
  2. https://blog.darkthread.net/blog/hangfire-sqlite/
  3. https://blog.kkbruce.net/2015/09/hangfire-aspnet-mvc-webapi.html#.XYm7xugzaUl

另一個排程管理平台Quartz.net

https://www.itread01.com/content/1546637058.html

--

--