1. 程式人生 > >分散式系統架構之構建你的任務排程中心

分散式系統架構之構建你的任務排程中心

**分散式系統架構之構建你的任務排程中心** 分散式系統中,我們經常會遇到定時執行任務,而這些定時任務中,多數情況都是需要執行一些http請求。 比如: - 輪訓支付結果(雖然第三方支付中心有支付回撥,但有時候並不能有效保證你的業務系統能收到正確的結果) - 未支付訂單超時取消,電商系統訂單,使用者未支付訂單,超時後取消訂單 - 已支付已簽收訂單,超時後自動完成訂單 - 同步微信公眾號使用者資料做分析 - 同步企業微信通訊錄及客戶資訊 - 等等 很多業務場景都需要用到定時執行http請求的任務 本次,我們在netcore 環境,使用 [Jango.JobCenter](https://www.nuget.org/packages/Jango.JobCenter) 來快速構建我們的任務排程中心 >[Jango.JobCenter](https://www.nuget.org/packages/Jango.JobCenter)目前是基於Hangfire的 .NETStandard 2.0版本 Demo原始碼,請移步[https://github.com/jangocheng/Jango.JobCenter.demo](https://github.com/jangocheng/Jango.JobCenter.demo) > dotnet new webapi 建立一個webapi專案 ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716124801976-134545178.png) > dotnet add package Jango.JobCenter --version 1.0.0.1 ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716125301805-782401913.png) 編輯StartUp檔案 1. 引用 Jango.JobCenter ``` using Jango.JobCenter; ``` 2. 修改ConfigureServices(IServiceCollection services) ``` services.AddJangoJobCenter(); ``` 3. 修改Configure(IApplicationBuilder app, IWebHostEnvironment env) ``` app.UseJangoJobCenter(); ``` ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716125804135-1040593630.png) 還原依賴包後,dotnet run 執行 ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716130713426-328903449.png) 可以看到,我們的任務排程中心已經執行起來了。 https://localhost:5001/hangfire 檢視任務中心儀表盤 ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716131019130-597320024.png) https://localhost:5001/swagger/index.html 檢視Jango.JobCenter 的文件 ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716131047553-1265206232.png) Jango.JobCenter 第一個介面為測試介面,僅僅Console輸出 ``` curl -X POST "https://localhost:5001/console" -H "accept: */*" -d "" ``` 或者 postman post 呼叫https://localhost:5001/console ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716132800411-1822677936.png) 可以看到結果輸出 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執行: 返回結果: ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716133707675-1940218962.png) 來看下console輸出: ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716133746967-1792504612.png) 黃色背景的內容,即為定時執行的結果。 我們來看下任務中心面板 ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716134034656-1508498040.png) 我們來看下任務中心儀表盤 ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716133912042-618763538.png) 可以看到已經開始執行任務了 至此,你的任務排程中心,已經構建完成。可以任意建立相關任務了。 如需技術支援:請加微信聯絡 ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716134700432-1308048964.jpg) 或加qq:649205176 ## **獲取Jango.Center原始碼及技術支援,請加微信,打賞一杯咖啡哈** ![image](https://img2020.cnblogs.com/blog/161781/202007/161781-20200716135239662-417455125.png) # 未來計劃 - **分散式系統架構之構建你的閘道器中心** - **分散式系統架構之構建基於事件的訊息引擎** - **分散式系統架構之構建基於事件的規則排程引擎** - **微服務系統架構與設計**