Hangfire 使用筆記


“巨人們”的地址
Hangfire Mysql:
https://github.com/arnoldasgudas/Hangfire.MySqlStorage 在獲取set表數據的sql語句有bug
 
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不支持查詢功能。。
我就改了一下源碼
 
新增了對於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管理 監控 日志等
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM