開源分佈式Job系統,調度與業務分離-如何建立週期性的HttpJob任務

項目介紹:

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

Hangfire.HttpJob 是我針對Hangfire開發的一個組件,該組件和Hangfire自己是獨立的。能夠獨立更新Hangfire版本不影響!git

該組件已被Hangfire官方採納,在Hangfire官網能夠查到:github

 

開源地址:web

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

 

該項目目的是:

剝離Job調度和業務api

 

 

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。服務器

特色是:app

  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

相關文章
相關標籤/搜索