.net任務調度框架Hangfire簡介
任務調度是我們項目中常見的功能,雖然任務調度的功能實現本身並不難,但一個好用的輪子還是可以給我們的開發的效率提升不少的。
在.net環境中,較為有名的任務調度框架是HangFire與Quartz.NET,本文這裡主要介紹Hangfire,相比Quartz.NET來說,它提供瞭更加友好的頁面,使用起來更加方便。Hangfire的優點網上有不少文章介紹的,這裡簡單的列舉一下:
- 支持各種常見的任務類型
- 持久化保存任務、隊列、統計信息
- 重試機制
- 多語言支持
- 支持任務取消
- 支持按指定Job Queue處理任務
- 服務器端工作線程可控,即job執行並發數控制
- 分佈式部署,支持高可用
- 良好的擴展性,如支持IOC、Hangfire Dashboard授權控制、Asp.net Core、持久化存儲等
簡單使用:
這裡就簡單的演示.net core下基本的用法。首先建立一個.net core 的web項目,如果沒有別的需求使用空項目模板也可以。
1. 添加程序包:
Install-Package Hangfire
2.配置數據庫:
Hangfire默認支持sqlserver和redis,也可以通過第三方擴展支持sqlite等數據庫。這裡我選擇的是常用的sqlserver。
使用sqlserver作為存儲引擎時,首先需要在sqlserver上創建一個數據庫,可以不用建表,Hangfire會自動建表。
3. 註冊服務:
首先在Startup.cs的ConfigureServices 方法中註冊服務:
services.AddHangfire(r => r.UseSqlServerStorage("Data Source=192.168.18.130;Initial Catalog=HangfireDemo;User ID=sa;Password=abc123@ss"));
然後在Configure 方法中加入HangfireServer及HangfireDashboard:
app.UseHangfireServer(); app.UseHangfireDashboard();
此時啟動程序,就可以通過http://localhost:5000/hangfire查看程序主界面瞭,默認還自帶中文
4. 配置任務
Hangfire提供瞭一系列接口配置任務:
//基於隊列的任務處理(Fire-and-forget jobs) var jobId = BackgroundJob.Enqueue( () => Console.WriteLine("Fire-and-forget!")); //延遲任務執行(Delayed jobs) var jobId = BackgroundJob.Schedule( () => Console.WriteLine("Delayed!"), TimeSpan.FromDays(7)); //定時任務執行(Recurring jobs) RecurringJob.AddOrUpdate( () => Console.WriteLine("Recurring!"), Cron.Daily); //延續性任務執行(Continuations) RecurringJob.AddOrUpdate( () => Console.WriteLine("Recurring!"), Cron.Daily);
這些任務是配置在服務器上的,如果要動態配置任務則可以通過讓服務器提供接口即可。
缺點
最後也簡單的說下Hangfire的缺點吧,另一個比較熱門的任務調度框架是Quartz.net,它和Hangfire相比有如下優點:
- 支持秒級單位的定時任務處理,但是Hangfire隻能支持分鐘及以上的定時任務處理
- 更加復雜的觸發器,日歷以及任務調度處理
- 可配置的定時任務
其中Hangfire最大的缺點可能是第一條,任務執行時間精度不夠,不過在大部分應用場景來說,這個不是很大的問題。
到此這篇關於.net任務調度框架Hangfire的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- .net core 基於Hangfire+Mysql持久化實現定時任務配置方法
- 使用resty Quartz執行定時任務的配置方法
- .net任務調度框架FluentScheduler簡介
- 作業調度框架Quartz.net用法詳解
- Quartz在.NET中的使用教程