分布式系統架構之構建你的任務調度中心
分布式系統中,我們經常會遇到定時執行任務,而這些定時任務中,多數情況都是需要執行一些http請求。比如:
- 輪訓支付結果(雖然第三方支付中心有支付回調,但有時候并不能有效保證你的業務系統能收到正確的結果)
- 未支付訂單超時取消,電商系統訂單,用戶未支付訂單,超時后取消訂單
- 已支付已簽收訂單,超時后自動完成訂單
- 同步微信公眾號用戶數據做分析
- 同步企業微信通訊錄及客戶信息
- 等等
很多業務場景都需要用到定時執行http請求的任務
本次,我們在netcore 環境,使用 Jango.JobCenter來快速構建我們的任務調度中心
Jango.JobCenter目前是基于Hangfire的 .NETStandard 2.0版本Demo源碼,請移步https://github.com/jangocheng/Jango.JobCenter.demo
dotnet new webapi 創建一個webapi項目
dotnet add package Jango.JobCenter --version 1.0.0.1
編輯StartUp文件
- 引用 Jango.JobCenter
using Jango.JobCenter;
- 修改ConfigureServices(IServiceCollection services)
services.AddJangoJobCenter();
- 修改Configure(IApplicationBuilder app, IWebHostEnvironment env)
app.UseJangoJobCenter();
還原依賴包后,dotnet run 運行
可以看到,我們的任務調度中心已經運行起來了。
https://localhost:5001/hangfire 查看任務中心儀表盤
https://localhost:5001/swagger/index.html 查看Jango.JobCenter 的文檔
Jango.JobCenter第一個接口為測試接口,僅僅Console輸出
curl -X POST "https://localhost:5001/console" -H "accept: */*" -d ""
或者postman post 調用https://localhost:5001/console
可以看到結果輸出 job name console is working now.
第二個接口為http 創建定時任務接口參數如下:
{
"name": "",//job name
"desc": "",//job 描述
"url": "",//定時調用url
"method": "", //http method :get/post/put/delete
"header": "",//http header 以kv形式,多個以,分割 比如: k1:v1,k2:v2
"requestBody": "",//http 請求體
"isRetry": true,//遇到錯誤是否重試
"retryTimes": 0,//重試次數
"isCircle": true,//是否周期性任務
"cron": "*/5 * * * * ?"//cron 表達式 此項移除,則系統默認5s執行一次http請求
}
我們來測試下:參數輸入:
{
"name": "demo", //demo
"desc": "定時調用百度",//
"url": "https://www.baidu.com",
"method": "get",//get方式
"header": "",
"requestBody": "",
"isRetry": false,// 錯誤后不重試
"retryTimes": 0,
"isCircle": true//周期性任務
//無Cron參數,系統默認每隔5s執行一次任務
}
postman執行:返回結果:
來看下console輸出:
黃色背景的內容,即為定時執行的結果。我們來看下任務中心面板
我們來看下任務中心儀表盤
可以看到已經開始執行任務了
至此,你的任務調度中心,已經構建完成。可以任意創建相關任務了