1. 程式人生 > 其它 >Hangfire 使用筆記 任務可以分離到別的專案中,無需重複部署Hangfire,通過API方式通訊。

Hangfire 使用筆記 任務可以分離到別的專案中,無需重複部署Hangfire,通過API方式通訊。

“巨人們”的地址 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。

特點是:

  1. 業務與排程完全分離。
  2. 支援定點執行 延遲執行 週期性迴圈執行,支援秒級別
  3. 配合JobAgent元件可以實現Job管理 監控 日誌等
轉自:http://Www.CnBlogs.Com/WebEnh/
本部落格Android APP 下載
支援我們就給我們點打賞
支付寶打賞 支付寶掃一掃二維碼
微信打賞 微信掃一掃二維碼

如果想下次快速找到我,記得點下面的關注哦!