開源分布式Job系統,調度與業務分離-如何創建周期性的HttpJob任務


項目介紹:

Hangfire:是一個開源的job調度系統,支持分布式JOB!!

Hangfire.HttpJob 是我針對Hangfire開發的一個組件,該組件和Hangfire本身是獨立的。可以獨立更新Hangfire版本不影響!

該組件已被Hangfire官方采納,在Hangfire官網可以查到:

 

開源地址:

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

 

該項目目的是:

剝離Job調度和業務

 

 

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管理 監控 日志等

 

共有三篇文章

 

開源分布式Job系統,調度與業務分離-如何創建一個計划httpjob任務

 

開源分布式Job系統,調度與業務分離-如何創建周期性的HttpJob任務

 

開源分布式Job系統,調度與業務分離-HttpJob.Agent組件介紹以及如何使用



 

 

本篇教程:如何創建一個周期性的HttpJob任務的

 

周期性的HttpJob任務的定義

  • 是多次運行的job 采用Cron表達式進行定義運行規則

注意事項

  • 最新版的hangfire已支持 6位數的Cron表達式(支持到秒級)
  • 但是我在hangfire的dashbord擴展的Cron生成頁面還不支持到秒級別(大家可以在google找可以生成6位的網站工具)

1. 進入hangfire的后台 點擊 上側欄【周期性作業】

如下圖所示: image

針對周期性作業 可以看到有三個按鈕

按鈕名稱 說明
新增周期性作業 新增一個周期性httpjob作業
編輯周期性作業 如果你重新編輯該周期性httpjob作業內容可以點擊該按鈕
Cron表達式生成 跳轉到Cron表達式生成頁面

1. 生成Cron表達式

點擊【Cron表達式生成】 進入Cron表達式生成頁面 如下圖: image

例如 我想要 每天晚上8點05分執行

image

image

image

得出結果:【5 20 * * *】

2.新增周期性作業

點擊【新增周期性作業】按鈕 會出現一個json編輯器

image

json編輯器的參數說明如下

字段名稱 備注
JobName 你給這個httpjob起的名稱【必填項】
Method 這個httpjob的請求方式 "get" 或者 "post" 【必填項】
ContentType 這個httpjob的請求ContentType 默認"application/json" 【必填項】
Url 這個httpjob的請求url 【必填項】
Cron Cron表達式 可以先用【Cron表達式生成】功能生成好,如果為空 代表只能手動觸發執行
Data 這個httpjob在Method=“post”的時候可以指定post的內容,可以是一個對象也可以是一個string或者其他類型
Timeout 這個httpjob請求的超時時間(單位是毫秒 例如5000 代表是5秒)
BasicUserName 這個httpjob請求需要啟用basic認證時設置的username
BasicPassword 這個httpjob請求需要啟用basic認證時設置的密碼
EnableRetry 失敗的時候(比如超時 遠程服務器請求錯誤等)是否啟用重試 默認false ,如果設置true 會重試最大3次
SendSucMail 這個httpjob請求無異常的時候是否發送通知郵件 默認false
SendFaiMail 這個httpjob請求異常的時候是否發送通知郵件 默認true
Mail 設置通知郵件地址 如果有多個用半角逗號隔開
AgentClass 如果是AgentJob開發的httpjob 則需要填寫,填寫的是完整的類型格式{namespace},{程序集的名稱} 例如:TestHangfireAgent.Jobs,TestHangfireAgent

舉例



比如 每天晚上8點執行一次查詢訂單已完成超xx小時了(xx作為參數) 但是還沒有點評的 發短信讓催點評 接口地址:http://localhost:5000/scoreOrder 訪問方式是POST 接口有basicAuth驗證 用戶名是admin 密碼是test # 那么對應如下填寫: { "JobName": "scoreOrder", //Job名稱 "Method": "POST", //http請求的方法  "ContentType": "application/json", //http參數類型 "Url": "http://localhost:5000/scoreOrder",//接口的地址  "Cron": "5 20 * * *", //每天晚上805分執行 "Data": { "Hour":48 //傳的參數超過48小時 }, "Timeout": 5000, //http調用超時設置 "BasicUserName": "admin", //http調用的basicAuth "BasicPassword": "test", //http調用的basicAuth "EnableRetry": false, "SendSucMail": false, "SendFaiMail": true, //http失敗時發郵件通知 "Mail": "1877682825@qq.com", //http調用失敗通知我 "AgentClass": "" } 

image

點擊【提交】

image

添加成功 在job列表可以查

我剛才設置的是20:05分執行

目前時間是19:50

正好是還有15分鍾就要執行了 說明Cron表達式沒有問題 image

對於周期性job 有3個按鈕可以操作

按鈕名稱 說明
立即執行 如果你希望不要等到8點05想立即就執行可以點擊它
停止或開始任務 如果你希望暫停這個周期性job 可以點它,點完之后再次點擊就是開啟
編輯周期任務 如果你剛剛添加的參數有錯誤,可以點擊這個按鈕重新編輯提交

image

停止或開始任務

如果一個周期性job是暫停的 會以紅色字體展示 image

編輯周期任務

點擊提交修改 image

周期性job執行

image

周期性job執行完畢 在完成列表可以查詢

image

點擊job編號進入job詳情頁查看具體執行情況和日志

image

也可以在Tag頁面進行查看

說明:Tag頁面是按jobName進行分組查詢的 image

點擊某一個jobName 進入該jobName下所有的運行完成的job列表

image


免責聲明!

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



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