從1月份首次公開介紹這個項目到如今也快4個月了,期間作了一些修修補補總體沒什麼大的改動。2.0算是發佈以後第一個大的版本更新,帶來了許多新功能新特性,也修復了一些已知的bug,在此感謝在博客、Issue和QQ羣中提出各類意見的朋友,以及指導過個人前輩大佬們。html
在我看來,這個項目沒有使用任何高深的技術和架構,甚至有些代碼寫的本身都不滿意不敢拿出來給你們觀賞,和社區中其餘一些開源項目的大佬們比起來自慚形穢。可是這幾個月陸續收到一些小夥伴的支持和鼓勵,也被一些源碼網站收錄和推薦,讓我有勇氣和信心把它繼續作下去,貴在堅持吧。git
新版本主要是增長了HTTP任務調度以及節點管理功能,開發過程當中重構了部分代碼,原本還打算完善一下單元測試,因爲時間關係無奈延後了。github
不太熟悉的朋友能夠看下以前的介紹:sql
完善了任務生命週期事件數據庫
任務列表支持節點名稱搜索和顯示優化json
支持配置HTTP任務c#
支持節點手動管理bash
支持在程序集任務中指定自定義配置文件
支持長任務取消
新增了一些系統策略配置
新增了動態參數啓動,對容器部署更友好
推出正式文檔
補充了一些使用demo
修復若干bug
本次更新稍有遺憾的是對HTTP任務受權認證處理這塊,我所瞭解到的開放API基本都實現了本身的一套簽名驗證機制,更完善的則會使用OAuth2那一套東西,使用簡單BASIC認證或JWT的比較少一些,因此感受接入BASIC和JWT的意義不大,可是面對五花八門的接口簽名或OAuth我暫時也沒有太好的方案,只好先給出一個簡陋的HTTP調度功能,往後還會繼續思考探索把這塊加上。
到這裏系統的核心調度功能基本差很少了,接下來會重點考慮異步化、資源監控、性能監控和更加自由的策略配置方面的東西。有些朋友也建議可否支持多數據庫類型、改爲SPA應用等等,這種需求目前不是很緊急,會日後放一放再看。
因爲開始維護正式文檔,博客中後期會有內容更新不及時,請以github wiki爲準。
一、提供了任務初始化入口:
public virtual void Initialize() { ///TODO: }
咱們能夠在這裏加載本身的配置文件(支持熱更新):
/// <summary> /// 演示如何設置本身的配置文件,以及讀取配置項 /// </summary> public class CustomConfigFile : TaskBase { public override void Initialize() { //指定配置文件 base.SetConfigurationFile("myconfig.json"); } public override void Run(TaskContext context) { context.WriteLog($"個人配置TestKey1:{Configuration["TestKey1"]}"); context.WriteLog($"個人配置TestKey2:name->{Configuration["TestKey2:Name"]} age->{Configuration["TestKey2:Age"]}"); } }
// myconfig.json { "TestKey1": "MyValue1", "TestKey2": { "Name": "hoho", "Age": 18 } }
或者作一些DI綁定的東西:
/// <summary> /// 演示如何在業務中使用DI /// </summary> public class TaskUseDI : TaskBase { IServiceProvider serviceProvider; public override void Initialize() { var serviceCollection = new ServiceCollection(); serviceCollection.AddTransient<ITemplateService1, TemplateService1>(); serviceCollection.AddTransient<ITemplateService2, TemplateService2>(); serviceProvider = serviceCollection.BuildServiceProvider(); base.Initialize(); } public override void Run(TaskContext context) { context.WriteLog($"我是使用DI獲取的結果:{new TaskUseDITest(serviceProvider.GetService<ITemplateService1>()).GetResult()}"); } }
Initialize()
方法的特色是隻會在建立任務實例時執行一次(固然你也可使用構造函數實現),伴隨直到任務實例銷燬(中止)的整個週期。
二、在控制檯中配置HTTP任務
[HttpPost] public string JsonPost(Blog model) { return "ok"; }
三、新增的若干配置項
四、禁用自動註冊模式,使用master主動建立並接管worker
五、使用命令行傳參覆蓋配置文件
// docker鏡像中的配置文件 { "NodeSetting": { "IdentityName": "worker1", "Role": "worker", "Protocol": "http", "IP": "localhost", "Port": 30001, "Priority": 1 } }
[root@master1 ms_worker1]# docker run -d -p 40001:80 --name="myworker1" ms_worker bash --identity=docker-worker1 --ip=192.168.174.5 --port=40001 5e446997d4a28b3c6ec0708a88d42a4d6baad1e5d5ae686d88c03e99c4e2003f
更多的等着你來慢慢探索~
重要提示:若是您從前面的版本升級,請務必檢查系統配置菜單是否有新增的配置項,若是沒有的話,請使用src目錄下的db.sql最後面的配置項腳本初始化數據。
INSERT INTO schedule_master.systemconfigs (key
,group
, name, value, sort, isreuired, remark, createtime, updatetime, updateusername) VALUES ('Http_RequestTimeout', 'HTTP配置', '請求超時時間', '10', 1, 1, '單位是秒,默認值是10', now(), null, null);
INSERT INTO schedule_master.systemconfigs (key
,group
, name, value, sort, isreuired, remark, createtime, updatetime, updateusername) VALUES ('System_WorkerUnHealthTimes', '系統配置', 'Worker容許無響應次數', '3', 1, 1, '健康檢查失敗達到最大次數會被下線剔除,默認值是3', now(), null, null);
INSERT INTO schedule_master.systemconfigs (key
,group
, name, value, sort, isreuired, remark, createtime, updatetime, updateusername) VALUES ('Assembly_ImagePullPolicy', '程序集配置', '文件包拉取策略', 'IfNotPresent', 1, 1, 'Always-老是拉取,IfNotPresent-本地沒有時拉取,默認是Always', now(), null, null);
本項目始終秉持部署簡單+操做簡單
的核心理念持續進行迭代更新,積極響應各方的建議和需求,爲開源社區添磚加瓦~
做者惟一開源地址 :
https://gitee.com/hey-hoho/ScheduleMasterCore (只從github同步)
文檔(還在逐步更新中):
感謝你們支持~
個人博客即將同步至騰訊雲+社區,邀請你們一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=oeevm2f6y7qt