從1月份首次公開介紹這個項目到現在也快4個月了,期間做了一些修修補補整體沒什麼大的改動。2.0算是發佈之後第一個大的版本更新,帶來了許多新功能新特性,也修複了一些已知的bug,在此感謝在博客、Issue和QQ群中提出各種意見的朋友,以及指導過我的前輩大佬們。 在我看來,這個項目沒有使用任何高深的技術 ...
從1月份首次公開介紹這個項目到現在也快4個月了,期間做了一些修修補補整體沒什麼大的改動。2.0算是發佈之後第一個大的版本更新,帶來了許多新功能新特性,也修複了一些已知的bug,在此感謝在博客、Issue和QQ群中提出各種意見的朋友,以及指導過我的前輩大佬們。
在我看來,這個項目沒有使用任何高深的技術和架構,甚至有些代碼寫的自己都不滿意不敢拿出來給大家觀賞,和社區中其他一些開源項目的大佬們比起來自慚形穢。但是這幾個月陸續收到一些小伙伴的支持和鼓勵,也被一些源碼網站收錄和推薦,讓我有勇氣和信心把它繼續做下去,貴在堅持吧。
新版本主要是增加了HTTP任務調度以及節點管理功能,開發過程中重構了部分代碼,本來還打算完善一下單元測試,由於時間關係無奈延後了。
不太熟悉的朋友可以看下之前的介紹:
新版本特性
-
完善了任務生命周期事件
-
任務列表支持節點名稱搜索和顯示優化
-
支持配置HTTP任務
-
支持節點手動管理
-
支持在程式集任務中指定自定義配置文件
-
支持長任務取消
-
新增了一些系統策略配置
-
新增了動態參數啟動,對容器部署更友好
-
推出正式文檔
-
補充了一些使用demo
-
修複若幹bug
本次更新稍有遺憾的是對HTTP任務授權認證處理這塊,我所瞭解到的開放API基本都實現了自己的一套簽名驗證機制,更完善的則會使用OAuth2那一套東西,使用簡單BASIC認證或JWT的比較少一些,所以感覺接入BASIC和JWT的意義不大,但是面對五花八門的介面簽名或OAuth我暫時也沒有太好的方案,只好先給出一個簡陋的HTTP調度功能,日後還會繼續思考探索把這塊加上。
到這裡系統的核心調度功能基本差不多了,接下來會重點考慮非同步化、資源監控、性能監控和更加自由的策略配置方面的東西。有些朋友也建議能否支持多資料庫類型、改成SPA應用等等,這種需求目前不是很緊急,會往後放一放再看。
先睹為快
由於開始維護正式文檔,博客中後期會有內容更新不及時,請以github wiki為準。
1、提供了任務初始化入口:
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()
方法的特點是只會在創建任務實例時執行一次(當然你也可以使用構造函數實現),伴隨直到任務實例銷毀(停止)的整個周期。
2、在控制臺中配置HTTP任務
[HttpPost]
public string JsonPost(Blog model)
{
return "ok";
}
3、新增的若幹配置項
4、禁用自動註冊模式,使用master主動創建並接管worker
5、使用命令行傳參覆蓋配置文件
// 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