天天看點

Hangfire 使用筆記

“巨人們”的位址

Hangfire Mysql:

https://github.com/arnoldasgudas/Hangfire.MySqlStorage 在擷取set表資料的sql語句有bug

Hangfire Console:

https://github.com/pieceofsummer/Hangfire.Console

站在巨人們的肩膀開始我的整合啦:

主要用在以下場景:

比如:

1客人下單,超過最晚支付時間就自動取消訂單

2複雜的需要花一定時間的計算,然後還得發推送通知

3 通過延遲和循環任務分批群發短信或郵件

等等

示意圖為

Hangfire 使用筆記

首先我封裝了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上看見計劃有一個任務

Hangfire 使用筆記

過了15分鐘後開始執行這個job,就發起請求,

下面的藍色部分就是 hangfire console的作用。

把執行的參數 結果等都儲存下來。。檢視的時候一目了然

Hangfire 使用筆記

目前還存在一些不友善的地方:

dashbord不支援查詢功能。。

我就改了一下源碼

https://github.com/yuzd/Hangfire.Core.Extend

https://github.com/yuzd/Hangfire.Mysql.Extend

新增了對于Netcore的支援 :

https://github.com/yuzd/Hangfire.HttpJob

效果如下

Hangfire 使用筆記
Hangfire 使用筆記
2016-12-25平安夜新增了dashbord新增作業和周期性作業的入口
Hangfire 使用筆記
Hangfire 使用筆記

2015-12-26新增了corn表達式線上生成的功能

至此 我想要的功能基本滿足了 yeah!

Hangfire 使用筆記
有興趣的同學可以看下 我最新開源的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管理 監控 日志等

如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”将是我最大的寫作動力!歡迎各位轉載,轉載文章之後須在文章頁面明顯位置給出作者和原文連接配接,謝謝。