安裝
NuGet 上有幾個可用的Hangfire 的軟件包。如果在ASP.NET應用程序中安裝HangFire,並使用Sql Server作為存儲器,那么請在Package Manager Console窗口中鍵入以下命令:
PM> Install-Package Hangfire
配置
在安裝package后,添加或者更新以下幾行到Owin Startp類:
using Hangfire; // ... public void Configuration(IAppBuilder app) { GlobalConfiguration.Configuration.UseSqlServerStorage("<connection string or its name>"); app.UseHangfireDashboard(); app.UseHangfireServer(); }
需要配置授權
默認情況下,只有本地有權限訪問Hangfire儀表板。如果需要授權遠程訪問,那么儀表板的授權必須進行相應的配置。
然后打開Hangfire儀表板來測試您的配置。編譯項目並在瀏覽器中打開以下URL:
http://<your-site>/hangfire
用法
添加工作
HangFire處理不同類型的后台任務,並且使用一個獨立的上下文環境調用他們。
Fire-And-forget(發布/訂閱)
這是一個主要的后台任務類型,持久化消息隊列會去處理這個任務。當你創建了一個發布/訂閱任務,該任務會被保存到默認隊列里面(默認隊列是"Default",但是支持使用多隊列)。多個專注的工作者(Worker)會監聽這個隊列,並且從中獲取任務並且完成任務。
BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget"));
延遲
如果想要延遲某些任務的執行,可以是用以下任務。在給定延遲時間后,任務會被排入隊列,並且和發布/訂閱任務一樣執行。
BackgroundJob.Schedule(() => Console.WriteLine("Delayed"), TimeSpan.FromDays(1));
循環
按照周期性(小時,天等)來調用方法,請使用RecurringJob類。在復雜的場景,您可以使用CRON表達式指定計划時間來處理任務。
RecurringJob.AddOrUpdate(() => Console.WriteLine("Daily Job"), Cron.Daily);
連續
連續性允許您通過將多個后台任務鏈接在一起來定義復雜的工作流。
var id = BackgroundJob.Enqueue(() => Console.WriteLine("Hello, ")); BackgroundJob.ContinueWith(id, () => Console.WriteLine("world!"));
釋放
Hangfire將您的任務保存到持久化庫匯總,並且以可靠的方式處理它們。這意味着,你可以中斷Hangfire Worder的線程,重新加載應用程序域,或者終止程序,即使這樣您的任務仍會被處理。只有在你代碼的最后一行執行完成,Hangfire才會標記這個任務完成。並且知道任務可能在最后一行代碼執行之前失敗。它包含多種 自動-重試機制,它可以自動處理在存儲或代碼執行過程中發生的錯誤。
這對於通用托管環境(如IIS Server)非常重要。它們可以包含不同的優化,超時和錯誤處理代碼(可能導致進程終止)來防止不好的事情發生。如果您沒有使用可靠的處理和自動機制,您的工作可能會丟失。您的最終用戶可能無限期等待某些任務,如電子郵件,報告,通知等。
但是當您的存儲空間破損時,Hangfire無法做任何事情。請為您的存儲使用不同的故障切換策略,以保證在發生災難時處理每個作業。
原文地址:http://docs.hangfire.io/en/latest/quick-start.html

