Hangfire 使用筆記 任務可以分離到別的專案中,無需重複部署Hangfire,通過API方式通訊。
阿新 • • 發佈:2021-10-22
“巨人們”的地址
Hangfire Mysql:
https://github.com/arnoldasgudas/Hangfire.MySqlStorage 在獲取set表資料的sql語句有bug
Hangfire Console:
https://github.com/pieceofsummer/Hangfire.Console
站在巨人們的肩膀開始我的整合啦:
主要用在以下場景:
比如:
1客人下單,超過最晚支付時間就自動取消訂單
2複雜的需要花一定時間的計算,然後還得發推送通知
3 通過延遲和迴圈任務分批群發簡訊或郵件
等等
示意圖為
首先我封裝了hangfire在server端加入api功能,封裝了以下:
1可以建立一個立刻執行的後臺job
2可以建立一個可延期執行的job
3可以建立一個定時週期性的job
4可以建立一個類似於Task的Continue功能的有執行順序的Job。例如A執行完了執行B,B執行完了執行C。。。
封裝了這層API這樣就統一了 job的入口。
並且規定好了job的引數,
因為具體job的執行是不在 hangfireserver裡面的。
hangfireserver是統一管理job和發起執行job的請求角色。
那麼hangfireserver是怎麼知道往哪裡發http請求去執行job,帶什麼引數的呢
都是在建立job的時候就約定好了。
例如 客人下單 時 呼叫 建立一個可延遲執行的job 例如延遲15分鐘
呼叫建立的時候 傳入的物件有發起http請求的一些引數例如
URL:執行具體job的api地址 也就是如上圖的web api excute
Method 是get還是 post
contenttype啊之類的。
因為雖然是內網 但是我也不想直接暴露給所有人 所以我額外規定了web api excute都要統一加了 basic認證。。
建立成功後
這個時候就可以在dashbord上看見計劃有一個任務
過了15分鐘後開始執行這個job,就發起請求,
下面的藍色部分就是 hangfire console的作用。
把執行的引數 結果等都儲存下來。。檢視的時候一目瞭然
目前還存在一些不方便的地方:
dashbord不支援查詢功能。。
我就改了一下原始碼
https://github.com/yuzd/Hangfire.Core.Extend
https://github.com/yuzd/Hangfire.Mysql.Extend
新增了對於Netcore的支援 :
https://github.com/yuzd/Hangfire.HttpJob
效果如下
2016-12-25平安夜新增了dashbord新增作業和週期性作業的入口
2015-12-26新增了corn表示式線上生成的功能
至此 我想要的功能基本滿足了 yeah!
有興趣的同學可以看下 我最新開源的Hangfire.HttpJob專案 :https://github.com/yuzd/Hangfire.HttpJob/wiki
如果想下次快速找到我,記得點下面的關注哦!
Hangfire.HttpJob究竟是幹嘛的
- 傳統使用Hangfire都是把JOb的處理邏輯程式碼寫在和Hangfire的同一個工程!
缺點: 這樣就耦合在了一起,如果業務線增大,會導致每個業務線的Job處理邏輯都得和Hangfire耦合在一起!釋出的時候所有業務線Job都得暫停排程
- 而使用了Hangfire.HttpJob的話 就是把Hangfire的服務拓展成可以把Job的處理邏輯程式碼寫在別的工程裡面(以webapi的形式暴露給Hangfire去排程)
優點:這樣就解耦了Hangfire和業務處理邏輯,業務job開發者可以忽略Hangfire的存在!不同的業務線分開不同的JobAgent可以分別部署,釋出互不影響
Hangfire.HttpJob
是對Hangfire的一個擴充套件外掛,利用Hangfire.HttpJob可以快速搭建分部署Job排程Server。
特點是:
- 業務與排程完全分離。
- 支援定點執行 延遲執行 週期性迴圈執行,支援秒級別
- 配合JobAgent元件可以實現Job管理 監控 日誌等
本部落格Android APP 下載 |
支援我們就給我們點打賞 |
支付寶打賞 支付寶掃一掃二維碼 |
微信打賞 微信掃一掃二維碼 |
如果想下次快速找到我,記得點下面的關注哦!