介紹
Hangfire是.net平臺和.net core平臺下的一個優秀的開源定時任務框架,它可以方便輕鬆地將定時任務集成到你的程序中,而且功能強大,。支持CPU和I / O密集型,長期運行和短期運行的後端作業。無需Windows服務/任務計劃程序。提供Redis,SQL Server,SQL Azure和MSMQ持久化的支持。同事還提供了集成了本地化的可視化界面可以優雅的對任務進行手動管理,且支持中文界面。
Github地址
https://github.com/HangfireIO/Hangfire
如何安裝使用?
在.net 和.net core的C#應用程序中,最方便我們使用的第三方庫管理莫過於Nuget了,因此你可以簡單的搜索HangFire,截止發文日期,版本是1.7.6,如下圖:
或者在程序包管理器中執行以下命令,兩種方式隨心所欲
Install-Package Hangfire
快速開始
以下是一個最簡單的代碼片段,用於配置HangFire,代碼是以SQLServer為例的
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration.UseSqlServerStorage("<connection>");
app.UseHangfireServer();
app.UseHangfireDashboard();
}
/<connection>
功能簡介
本文不涉及如何在具體的應用程序如何調用,以下是對其功能進行簡單的介紹,也是官方Github上提及的一些常用功能。
- 即發即消失的任務
BackgroundJob.Enqueue(() => Console.WriteLine("Simple!"));
- 延時任務
僅在給定的時間後執行的計劃的後臺任務
BackgroundJob.Schedule(() => Console.WriteLine("Reliable!"), TimeSpan.FromDays(7));
- 重複的定時任務
重複性的任務就是這麼簡單,只需調用以下方法即可使用CRON表達式執行任何類型的重複任務,由於支持CRON表達式,所以其是支持到秒級的
RecurringJob.AddOrUpdate(() => Console.WriteLine("Transparent!"), Cron.Daily);
- 多任務相互協作
允許多個任務之間相互調度,完成更加複雜的調度任務
var id = BackgroundJob.Enqueue(() => Console.WriteLine("Hello, "));
BackgroundJob.ContinueWith(id, () => Console.WriteLine("world!"));
Web作業
你可以在任何兼容OWIN的應用程序框架中處理後臺任務,包括ASP.NET MVC,ASP.NET Web API,FubuMvc,Nancy等。
app.UseHangfireServer();
在控制檯應用程序,Windows服務,Azure Worker Role等中:
using (new BackgroundJobServer())
{
Console.WriteLine("Hangfire Server started. Press ENTER to exit...");
Console.ReadLine();
}
使用情況
以下一些截圖是筆者配置在進行中的項目中的一個實例,簡單的對其管理面板有一個瞭解
- 儀表盤對其任務執行情況一目瞭然
- 作業隊列一覽
任務隊列包括計劃的任務、執行中的任務、完成的任務、失敗的任務、刪除的任務、以及等待中的任務,
還可以查看執行情況以便於是否需要手動重試
- 週期任務的列表管理
定時的週期性任務,在這裡很清晰,而且可以手動執行,筆者目前就幹了一件事,因為項目初期手動維護一部分基礎數據是很有可能的,為了防止一些基礎數據緩存的及時性,在更新完數據庫後可手動執行任務重建緩存,目前一個任務定了一個月時間,這樣就不必每次都重新啟動應用程序了。
- 運行的服務器
由於HangFire是分佈式的,可以再儀表盤看到運行的服務器
總結
HangFire絕對是一個值得使用的分佈式任務框架,社區版永久免費,即使是商用情況下也是免費的,大多數情況下社區版本已經夠用,除非你有非常複雜的任務需要實現,也可以通過收費版本的,支持的功能更強大!如果你還有更好的推薦可以在評論區留言分享!
閱讀更多 最美分享Coder 的文章