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

JangoCheng發表於2020-07-16

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

分散式系統中,我們經常會遇到定時執行任務,而這些定時任務中,多數情況都是需要執行一些http請求。
比如:

  • 輪訓支付結果(雖然第三方支付中心有支付回撥,但有時候並不能有效保證你的業務系統能收到正確的結果)
  • 未支付訂單超時取消,電商系統訂單,使用者未支付訂單,超時後取消訂單
  • 已支付已簽收訂單,超時後自動完成訂單
  • 同步微信公眾號使用者資料做分析
  • 同步企業微信通訊錄及客戶資訊
  • 等等
    很多業務場景都需要用到定時執行http請求的任務

本次,我們在netcore 環境,使用 Jango.JobCenter
來快速構建我們的任務排程中心

Jango.JobCenter目前是基於Hangfire的 .NETStandard 2.0版本
Demo原始碼,請移步https://github.com/jangocheng/Jango.JobCenter.demo

dotnet new webapi 建立一個webapi專案

image

dotnet add package Jango.JobCenter --version 1.0.0.1

image

編輯StartUp檔案

  1. 引用 Jango.JobCenter
using Jango.JobCenter;
  1. 修改ConfigureServices(IServiceCollection services)
services.AddJangoJobCenter();
  1. 修改Configure(IApplicationBuilder app, IWebHostEnvironment env)
app.UseJangoJobCenter();

image

還原依賴包後,dotnet run 執行

image

可以看到,我們的任務排程中心已經執行起來了。

https://localhost:5001/hangfire 檢視任務中心儀表盤

image

https://localhost:5001/swagger/index.html 檢視Jango.JobCenter 的文件

image

Jango.JobCenter
第一個介面為測試介面,僅僅Console輸出

curl -X POST "https://localhost:5001/console" -H "accept: */*" -d ""

或者
postman post 呼叫https://localhost:5001/console
image

可以看到結果輸出 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
來看下console輸出:

image

黃色背景的內容,即為定時執行的結果。
我們來看下任務中心皮膚
image

我們來看下任務中心儀表盤
image
可以看到已經開始執行任務了

至此,你的任務排程中心,已經構建完成。可以任意建立相關任務了。

如需技術支援:請加微信聯絡

image

或加qq:649205176

獲取Jango.Center原始碼及技術支援,請加微信,打賞一杯咖啡哈

image

未來計劃

  • 分散式系統架構之構建你的閘道器中心
  • 分散式系統架構之構建基於事件的訊息引擎
  • 分散式系統架構之構建基於事件的規則排程引擎
  • 微服務系統架構與設計
  • ...

相關文章