開源分佈式Job系統,調度與業務分離-如何建立一個計劃HttpJob任務

項目介紹:

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

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

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

 

開源地址:github

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

 

 

該項目目的是:

剝離Job調度和業務json

 

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。api

特色是:服務器

  1. 業務與調度徹底分離。
  2. 支持定點執行 延遲執行 週期性循環執行,支持秒級別
  3. 配合JobAgent組件能夠實現Job管理 監控 日誌等

 

共有三篇文章

 

開源分佈式Job系統,調度與業務分離-如何建立一個計劃httpjob任務

 

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

 

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



 

 

 

本篇教程:如何建立一個計劃httpjob任務

計劃httpjob任務的定義

一次性的job 只運行一次markdown

1. 進入hangfire的後臺 點擊 左側欄【計劃】

會看到一個按鈕名稱叫 【新增常規做業】以下圖所示: imageapp

2. 點擊【新增常規做業】會出現一個json編輯器

以下圖所示 image

json編輯器的參數說明以下

字段名稱 備註
JobName 你給這個httpjob起的名稱【必填項】
Method 這個httpjob的請求方式 "get" 或者 "post" 【必填項】
ContentType 這個httpjob的請求ContentType 默認"application/json" 【必填項】
Url 這個httpjob的請求url 【必填項】
DelayFromMinutes 須要延遲執行的分鐘,注意:0 表明馬上執行; -1表明只能手動觸發; >=1表明延遲分鐘數 【必填項】
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

3.舉例

我開發了一個訂單支付超時檢測 接口
訪問地址是:
http://localhost:5000/checkOrder
訪問方式是POST
訪問的參數是 orderId
接口有basicAuth驗證 用戶名是admin 密碼是test
但願計劃 15分鐘後執行 看有沒有支付 沒有支付 就把訂單狀態改爲取消
若是接口訪問失敗那麼通知郵箱 1877682825@qq.com

# 那麼對應以下填寫:

{
  "JobName": "checkOrder",                  //Job名稱
  "Method": "POST",                         //http請求的方法 
  "ContentType": "application/json",        //http參數類型
  "Url": "http://localhost:5000/checkOrder",//接口的地址 
  "DelayFromMinutes": 15,                   //15分鐘後執行
  "Data": {
    "OrderId":123456                        //傳的參數 orderId
  },
  "Timeout": 5000,                          //http調用超時設置
  "BasicUserName": "admin",                 //http調用的basicAuth
  "BasicPassword": "test",                  //http調用的basicAuth
  "EnableRetry": false,
  "SendSucMail": false,
  "SendFaiMail": true,                      //http失敗時發郵件通知
  "Mail": "1877682825@qq.com",              //http調用失敗通知我
  "AgentClass": ""
}

點擊【提交】添加job 成功以下圖所示:

image

能夠看到會在15分鐘後執行該job

image

針對該job 能夠看到有四個按鈕

按鈕名稱 說明
加入隊列 若是你想讓這個job當即執行 能夠點擊該按鈕
刪除選中 若是你想刪除這個job 能夠點擊該按鈕
帶參數執行 這個按鈕的做用是 從新定義JSON裏面的Data的值 並當即執行的意思,在AgentJob場景下使用較多
中止Job 這個只能在AgentJob纔可使用

job到時執行 以下圖所示

image

job執行完畢 在完成列表能夠查詢

image

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

image

也能夠在Tag頁面進行查看

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

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

image

相關文章
相關標籤/搜索