日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

.NET Core 分布式任務(wù)調(diào)度ScheduleMaster詳解

瀏覽:505日期:2022-06-04 15:14:56
目錄
  • 1.什么是ScheduleMaster
  • 2.使用ScheduleMaster
    • 1.配置Http調(diào)度任務(wù)
    • 2.配置程序集調(diào)度任務(wù)
  • 3.使用Api接入任務(wù)
    • 1.API Server 對接流程
    • 2.創(chuàng)建程序集任務(wù)
    • 3.創(chuàng)建HTTP任務(wù)
    • 4.創(chuàng)建延時任務(wù)
  • 4.框架簡單分析
    • 1.全局設(shè)計
    • 2.Master和Work分析

1.什么是ScheduleMaster

ScheduleMaster是分布式任務(wù)調(diào)度系統(tǒng),是國內(nèi)的一位開發(fā)者寫的。簡稱:集中任務(wù)調(diào)度系統(tǒng),最簡單的理解ScheduleMaster,就是對不同的系統(tǒng)里面的調(diào)度任務(wù)做統(tǒng)一管理的框架。

例如我們現(xiàn)在有多個系統(tǒng),每個系統(tǒng)針對自己處理不同的業(yè)務(wù)場景。衍生出自己的調(diào)度任務(wù),想象一下,如果每個系統(tǒng)人為去維護,那隨著調(diào)度任務(wù)越來越多,人是崩潰的吧,可見維護和技術(shù)成本是巨大的,這時我們需要選擇分布式任務(wù)系統(tǒng)框架做統(tǒng)一的管理

當(dāng)然有目前有很多相對優(yōu)秀分布式任務(wù)系統(tǒng)框架,我們主要學(xué)習(xí) ScheduleMaster

2.使用ScheduleMaster

1.首先我們需要使用NET Core web Api創(chuàng)建幾個模擬的微服務(wù),分別為 考勤、算薪、郵件、短信

2.下載開源的ScheduleMaster,并且使用ScheduleMaster調(diào)度我們的微服務(wù)接口

- sqlserver:"Persist Security Info = False; User ID =sa; Password =123456; Initial Catalog =schedule_master; Server =."
- postgresql:"Server=localhost;Port=5432;Database=schedule_master;User Id=postgres;Password=123456;Pooling=true;MaxPoolSize=20;"
- mysql:"Data Source=localhost;Database=schedule_master;User ID=root;Password=123456;pooling=true;CharSet=utf8mb4;port=3306;sslmode=none;TreatTinyAsBoolean=true"

修改Host的配置文件和支持的數(shù)據(jù)庫,框架默認使用Mysql

修改Web的配置文件和支持的數(shù)據(jù)庫,框架默認使用Mysql

3.進入Hos.ScheduleMaster.Web項目的發(fā)布目錄,dotnet Hos.ScheduleMaster.Web.dll啟動項目 ,此時會生成數(shù)據(jù)庫

登錄賬號:admin

密碼:111111

4.進入Hos.ScheduleMaster.QuartzHost項目的發(fā)布目錄,執(zhí)行命令,啟動項目

dotnet Hos.ScheduleMaster.QuartzHost.dll --urls http://*:30003

1.配置Http調(diào)度任務(wù)

5.準(zhǔn)備就緒后,使用后臺查看節(jié)點管理,可以看到web主節(jié)點30000和任務(wù)調(diào)度的接口30002已經(jīng)在運行

6.使用任務(wù)列表菜單,創(chuàng)建定時調(diào)度任務(wù),配置基礎(chǔ)信息和元數(shù)據(jù)配置,然后點擊保存就開始執(zhí)行任務(wù)

2.配置程序集調(diào)度任務(wù)

1.創(chuàng)建一個類庫,安裝ScheduleMaster庫, 創(chuàng)建一個類繼承TaskBase,實現(xiàn)抽象方法,然后編譯程序集

namespace TaskExcuteService{    class AssemblyTask : TaskBase    {public override void Run(TaskContext context){    context.WriteLog("程序集任務(wù)");}    }}

2.找到debug目錄,去掉Base程序集,然后添加為壓縮文件

3.在web界面找到任務(wù)配置,選擇程序集進行基本配置,配置元數(shù)據(jù),輸入程序集名稱,然后輸入類,并將程序集上傳,保存就可以運行了

3.使用Api接入任務(wù)

為了方便業(yè)務(wù)系統(tǒng)更好的接入調(diào)度系統(tǒng),ScheduleMaster創(chuàng)建任務(wù)不僅可以在控制臺中實現(xiàn),系統(tǒng)也提供了WebAPI供業(yè)務(wù)系統(tǒng)使用代碼接入,這種方式對延時任務(wù)來說尤其重要。

1.API Server 對接流程

  • 在控制臺中創(chuàng)建好專用的API對接用戶賬號。
  • 使用對接賬號的用戶名設(shè)置為http header中的ms_auth_user值。
  • 使用經(jīng)過哈希運算過的秘鑰設(shè)置為http header中的ms_auth_secret值,計算規(guī)則:按{用戶名}{hash(密碼)}{用戶名}的格式拼接得到字符串str,然后再對str做一次hash運算即得到最終秘鑰,hash函數(shù)是小寫的32位MD5算法。
  • 使用form格式發(fā)起http調(diào)用,如果非法用戶會返回401-Unauthorized。
HttpClient client = new HttpClient();client.DefaultRequestHeaders.Add("ms_auth_user", "admin");client.DefaultRequestHeaders.Add("ms_auth_secret", SecurityHelper.MD5($"admin{SecurityHelper.MD5("111111")}}admin"));

所有接口采用統(tǒng)一的返回格式,字段如下:

參數(shù)名稱參數(shù)類型說明Successbool是否成功Statusint結(jié)果狀態(tài),0-請求失敗 1-請求成功 2-登錄失敗 3-參數(shù)異常 4-數(shù)據(jù)異常Messagestring返回的消息Dataobject返回的數(shù)據(jù)

2.創(chuàng)建程序集任務(wù)

使用API創(chuàng)建任務(wù)的方式不支持上傳程序包,所以在任務(wù)需要啟動時要確保程序包已通過其他方式上傳,否則會啟動失敗。

  • 接口地址:http://yourip:30000/api/task/create
  • 請求類型:POST
  • 參數(shù)格式:application/x-www-form-urlencoded
  • 返回結(jié)果:創(chuàng)建成功返回任務(wù)id
  • 參數(shù)列表:
參數(shù)名稱參數(shù)類型是否必填說明MetaTypeint是任務(wù)類型,這里固定是1Titlestring是任務(wù)名稱RunLoopbool是是否按周期執(zhí)行CronExpressionstring否cron表達式,如果RunLoop為true則必填A(yù)ssemblyNamestring是程序集名稱ClassNamestring是執(zhí)行類名稱,包含完整命名空間StartDateDateTime是任務(wù)開始時間EndDateDateTime否任務(wù)停止時間,為空表示不限停止時間Remarkstring否任務(wù)描述說明KeepersList<int>否監(jiān)護人idNextsList<guid>否子級任務(wù)idExecutorsList<string>否執(zhí)行節(jié)點名稱RunNowbool否創(chuàng)建成功是否立即啟動ParamsList<ScheduleParam>否自定義參數(shù)列表,也可以通過CustomParamsJson字段直接傳json格式字符串

ScheduleParam:

參數(shù)名稱參數(shù)類型是否必填說明ParamKeystring是參數(shù)名稱ParamValuestring是參數(shù)值ParamRemarkstring否參數(shù)說明
HttpClient client = new HttpClient();List<KeyValuePair<string, string>> args = new List<KeyValuePair<string, string>>();args.Add(new KeyValuePair<string, string>("MetaType", "1"));args.Add(new KeyValuePair<string, string>("RunLoop", "true"));args.Add(new KeyValuePair<string, string>("CronExpression", "33 0/8 * * * ?"));args.Add(new KeyValuePair<string, string>("Remark", "By Xunit Tester Created"));args.Add(new KeyValuePair<string, string>("StartDate", DateTime.Today.ToString("yyyy-MM-dd HH:mm:ss")));args.Add(new KeyValuePair<string, string>("Title", "程序集接口測試任務(wù)"));args.Add(new KeyValuePair<string, string>("AssemblyName", "Hos.ScheduleMaster.Demo"));args.Add(new KeyValuePair<string, string>("ClassName", "Hos.ScheduleMaster.Demo.Simple"));args.Add(new KeyValuePair<string, string>("CustomParamsJson", "[{\"ParamKey\":\"k1\",\"ParamValue\":\"1111\",\"ParamRemark\":\"r1\"},{\"ParamKey\":\"k2\",\"ParamValue\":\"2222\",\"ParamRemark\":\"r2\"}]"));args.Add(new KeyValuePair<string, string>("Keepers", "1"));args.Add(new KeyValuePair<string, string>("Keepers", "2"));//args.Add(new KeyValuePair<string, string>("Nexts", ""));//args.Add(new KeyValuePair<string, string>("Executors", ""));HttpContent reqContent = new FormUrlEncodedContent(args);var response = await client.PostAsync("http://localhost:30000/api/Task/Create", reqContent);var content = await response.Content.ReadAsStringAsync();Debug.WriteLine(content);

3.創(chuàng)建HTTP任務(wù)

  • 接口地址:http://yourip:30000/api/task/create
  • 請求類型:POST
  • 參數(shù)格式:application/x-www-form-urlencoded
  • 返回結(jié)果:創(chuàng)建成功返回任務(wù)id
  • 參數(shù)列表:
參數(shù)名稱參數(shù)類型是否必填說明MetaTypeint是任務(wù)類型,這里固定是2Titlestring是任務(wù)名稱RunLoopbool是是否按周期執(zhí)行CronExpressionstring否cron表達式,如果RunLoop為true則必填StartDateDateTime是任務(wù)開始時間EndDateDateTime否任務(wù)停止時間,為空表示不限停止時間Remarkstring否任務(wù)描述說明HttpRequestUrlstring是請求地址HttpMethodstring是請求方式,僅支持GET\POST\PUT\DELETEHttpContentTypestring是參數(shù)格式,僅支持application/json和application/x-www-form-urlencodedHttpHeadersstring否自定義請求頭,ScheduleParam列表的json字符串HttpBodystring是如果是json格式參數(shù),則是對應(yīng)參數(shù)的json字符串;如果是form格式參數(shù),則是對應(yīng)ScheduleParam列表的json字符串。KeepersList<int>否監(jiān)護人idNextsList<guid>否子級任務(wù)idExecutorsList<string>否執(zhí)行節(jié)點名稱RunNowbool否創(chuàng)建成功是否立即啟動
HttpClient client = new HttpClient();List<KeyValuePair<string, string>> args = new List<KeyValuePair<string, string>>();args.Add(new KeyValuePair<string, string>("MetaType", "2"));args.Add(new KeyValuePair<string, string>("RunLoop", "true"));args.Add(new KeyValuePair<string, string>("CronExpression", "22 0/8 * * * ?"));args.Add(new KeyValuePair<string, string>("Remark", "By Xunit Tester Created"));args.Add(new KeyValuePair<string, string>("StartDate", DateTime.Today.ToString("yyyy-MM-dd HH:mm:ss")));args.Add(new KeyValuePair<string, string>("Title", "Http接口測試任務(wù)"));args.Add(new KeyValuePair<string, string>("HttpRequestUrl", "http://localhost:56655/api/1.0/value/jsonpost"));args.Add(new KeyValuePair<string, string>("HttpMethod", "POST"));args.Add(new KeyValuePair<string, string>("HttpContentType", "application/json"));args.Add(new KeyValuePair<string, string>("HttpHeaders", "[]"));args.Add(new KeyValuePair<string, string>("HttpBody", "{ \"Posts\": [{ \"PostId\": 666, \"Title\": \"tester\", \"Content\":\"testtesttest\" }], \"BlogId\": 111, \"Url\":\"qweqrrttryrtyrtrtrt\" }"));HttpContent reqContent = new FormUrlEncodedContent(args);var response = await client.PostAsync("http://localhost:30000/api/Task/Create", reqContent);var content = await response.Content.ReadAsStringAsync();Debug.WriteLine(content);

4.創(chuàng)建延時任務(wù)

  • 接口地址:http://yourip:30000/api/delaytask/create
  • 請求類型:POST
  • 參數(shù)格式:application/x-www-form-urlencoded
  • 返回結(jié)果:創(chuàng)建成功返回任務(wù)id
  • 參數(shù)列表:
參數(shù)名稱參數(shù)類型是否必填說明SourceAppstring是來源Topicstring是主題ContentKeystring是業(yè)務(wù)關(guān)鍵字DelayTimeSpanint是延遲相對時間DelayAbsoluteTimeDateTime是延遲絕對時間NotifyUrlstring是回調(diào)地址NotifyDataTypestring是回調(diào)參數(shù)格式,僅支持application/json和application/x-www-form-urlencodedNotifyBodystring是回調(diào)參數(shù),json格式字符串
for (int i = 0; i < 5; i++){    int rndNum = new Random().Next(20, 500);    List<KeyValuePair<string, string>> args = new List<KeyValuePair<string, string>>();    args.Add(new KeyValuePair<string, string>("SourceApp", "TestApp"));    args.Add(new KeyValuePair<string, string>("Topic", "TestApp.Trade.TimeoutCancel"));    args.Add(new KeyValuePair<string, string>("ContentKey", i.ToString()));    args.Add(new KeyValuePair<string, string>("DelayTimeSpan", rndNum.ToString()));    args.Add(new KeyValuePair<string, string>("DelayAbsoluteTime", DateTime.Now.AddSeconds(rndNum).ToString("yyyy-MM-dd HH:mm:ss")));    args.Add(new KeyValuePair<string, string>("NotifyUrl", "http://localhost:56655/api/1.0/value/delaypost"));    args.Add(new KeyValuePair<string, string>("NotifyDataType", "application/json"));    args.Add(new KeyValuePair<string, string>("NotifyBody", "{ \"Posts\": [{ \"PostId\": 666, \"Title\": \"tester\", \"Content\":\"testtesttest\" }], \"BlogId\": 111, \"Url\":\"qweqrrttryrtyrtrtrt\" }"));    HttpContent reqContent = new FormUrlEncodedContent(args);    var response = await client.PostAsync("http://localhost:30000/api/DelayTask/Create", reqContent);    var content = await response.Content.ReadAsStringAsync();    Debug.WriteLine(content);}

4.框架簡單分析

1.全局設(shè)計

根據(jù)官網(wǎng)的設(shè)計圖,以及操作的流程,簡單總結(jié)一下任務(wù)全局流程為客戶端—–>master——>work—–>執(zhí)行任務(wù)。從大的架構(gòu)方向的思想就是,將原有單個服務(wù)中業(yè)務(wù)和任務(wù)調(diào)度混合的方式做一些改變,使業(yè)務(wù)和調(diào)度分離,專門把任務(wù)調(diào)度部分剝離出來,作為一個獨立的進程,來統(tǒng)一調(diào)用和管理任務(wù),而原有服務(wù)只做業(yè)務(wù)處理。

2.Master和Work分析

我們主要從主節(jié)點,從節(jié)點,數(shù)據(jù)表這幾個方面來簡單分析,整個業(yè)務(wù)的時序流程,從本質(zhì)來看并不復(fù)雜master和Work之間的關(guān)系是相互配合的,可能乍一看下面整個圖有點混亂,下面來解釋一下,其實Master節(jié)點將任務(wù)添加到數(shù)據(jù)中,然后work節(jié)點,去從對應(yīng)的數(shù)據(jù)表中取出任務(wù)數(shù)據(jù),然后根據(jù)任務(wù)對應(yīng)的配置,生成配置信息,調(diào)用Quartz執(zhí)行任務(wù),這就是我們整個框架中最核心的業(yè)務(wù)。

當(dāng)然master和work除了主要承載了整個管理系統(tǒng)的UI可視化、后臺業(yè)務(wù)操作、任務(wù)執(zhí)行之外,如果從細節(jié)以及實現(xiàn)方式來說主要做了以下事情:

Master

  • 1.分配任務(wù)執(zhí)行和選擇節(jié)點
  • 2.對work節(jié)點進行健康檢查,對任務(wù)進行故障轉(zhuǎn)移

Work

  • 1.取出任務(wù)配置信息
  • 2.使用Quartz根據(jù)配置運行任務(wù)
  • 3.使用反射調(diào)用程序集
  • 4.使用httpclient調(diào)用http 接口

到此這篇關(guān)于分布式任務(wù)調(diào)度ScheduleMaster的文章就介紹到這了,更多相關(guān)分布式任務(wù)調(diào)度ScheduleMaster內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: ASP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品在线网站观看| 日韩专区欧美专区| 色88888久久久久久影院| 91免费精品国偷自产在线在线| 日韩啪啪电影网| 国产伊人久久| 日韩高清三区| 综合国产在线| 欧美二区视频| 美日韩精品视频| 久热精品在线| 制服诱惑一区二区| 国产精品7m凸凹视频分类| 亚洲电影在线一区二区三区| 国产韩日影视精品| 9久re热视频在线精品| 欧美+日本+国产+在线a∨观看| 在线成人动漫av| 欧美激情精品| 亚洲专区视频| 美女精品视频在线| 久久久成人网| 丝袜国产日韩另类美女| 蜜桃视频一区二区三区| 日本伊人久久| 国产精久久久| 欧美精品日日操| 亚洲三级网址| 91精品国产成人观看| 国产suv精品一区二区四区视频 | 在线日韩中文| 91欧美在线| 久久青草久久| 精品国产欧美| 午夜欧美精品| 久久精品国产免费| 日av在线不卡| 国产日韩欧美一区在线| 国产伊人精品| 91国语精品自产拍| 日韩精品欧美大片| 亚洲成a人片| 日韩激情av在线| 99久久亚洲精品蜜臀| 日精品一区二区三区| 日韩在线综合| 欧美国产另类| 午夜日韩av| 国产成人黄色| 国产麻豆一区二区三区精品视频| 欧美aa在线观看| 亚洲精品动态| 一区二区小说| 日韩欧美精品一区| 久久国内精品视频| 亚洲人成网77777色在线播放| 激情视频网站在线播放色| 麻豆91精品91久久久的内涵| 久久香蕉精品| 影院欧美亚洲| 欧美影院三区| 超级白嫩亚洲国产第一| 国产欧美高清| 婷婷综合激情| 日韩欧美精品一区| 国产一区三区在线播放| 青青草国产成人99久久| 欧美影院精品| 国产精品色婷婷在线观看| 亚洲婷婷丁香| 久久久天天操| 欧美 日韩 国产精品免费观看| 日韩av专区| 亚洲啊v在线| 欧美日韩精品免费观看视完整| 国产一区二区三区探花| av资源新版天堂在线| 精品精品99| 美女网站视频一区| 久久精品国产大片免费观看| 午夜久久久久| 中文视频一区| 日本视频一区二区| 欧美午夜三级| 国产美女视频一区二区| 国产精品片aa在线观看| 国产亚洲一区| 四虎8848精品成人免费网站| 日韩中文影院| 国产一区清纯| 日韩二区在线观看| 欧美黑人做爰爽爽爽| 伊人久久av| 国产高清一区| 亚洲大片在线| 国产美女亚洲精品7777| 亚洲午夜久久久久久尤物| 亚洲国产专区校园欧美| 亚洲欧美不卡| 亚洲最新av| 国产欧美视频在线| 国产一区一一区高清不卡| 秋霞影院一区二区三区| 伊人成人在线视频| 日韩精品视频一区二区三区| 麻豆精品视频在线观看| 免费av一区| 日韩精品久久理论片| 日韩亚洲一区在线| 亚洲一区二区小说| 美女久久一区| 国产一区二区三区探花| 中文欧美日韩| 久久久免费人体| 麻豆精品蜜桃| 国产精品二区影院| 日韩在线一区二区| 久久精品动漫| 青青伊人久久| 只有精品亚洲| 宅男在线一区| 国产黄大片在线观看| 欧美日韩一视频区二区| 亚洲欧美日韩国产一区二区| 中文一区一区三区高中清不卡免费| 青草综合视频| 日韩一区二区三区精品| 亚洲精品1区| 亚洲精品福利电影| 午夜天堂精品久久久久| 夜夜嗨一区二区三区| 黄色成人91| 午夜精品影院| 日韩一级网站| 亚洲专区欧美专区| 不卡专区在线| 欧美日韩精品免费观看视欧美高清免费大片 | 国产精品magnet| 日韩影院二区| 久久精品国产亚洲夜色av网站| 亚洲91视频| 九九综合九九| 亚洲综合中文| 国产精品视频一区视频二区| 久久尤物视频| 秋霞影视一区二区三区| 国产专区一区| 日韩精品免费视频一区二区三区| 国产精品亚洲二区| 亚洲精品**中文毛片| 国产精品99一区二区| 免费看黄色91| 久久香蕉精品香蕉| 免费污视频在线一区| 99亚洲视频| 国产精品久久久网站| 91精品久久久久久久久久不卡| 国产视频亚洲| 麻豆一区二区在线| 亚洲精品午夜av福利久久蜜桃| 亚洲2区在线| 婷婷激情一区| 日韩欧美在线精品| 色一区二区三区| 午夜久久av| 久久久久91| 欧美日韩亚洲国产精品| 久草免费在线视频| 蜜桃一区二区三区在线| 日韩电影免费网站| 国产欧美一区二区色老头| av亚洲在线观看| 毛片不卡一区二区| 日韩在线网址| 婷婷综合亚洲| 亚洲国产欧美日本视频| 国产欧美啪啪| 日韩在线网址| 亚洲人www| 欧美精品黄色| 私拍精品福利视频在线一区| 国产日韩一区二区三免费高清| 亚洲电影在线一区二区三区| 国产精品成人3p一区二区三区| 亚洲欧美日韩在线观看a三区| 麻豆网站免费在线观看| 欧美成人精品午夜一区二区| 亚洲精品欧美| 蜜臀久久99精品久久久久久9| 精品中文一区| 欧美日中文字幕| 欧美xxxx中国| 国产资源在线观看入口av| 精品日产乱码久久久久久仙踪林| 日韩av二区在线播放| 亚洲麻豆一区| 日韩欧美2区| 日韩激情视频网站| 亚洲久久一区| 色综合视频一区二区三区日韩|