.NET Core下的开源分布式任务调度系统ScheduleMaster-v2.0低调发布
從1月份首次公開介紹這個項目到現在也快4個月了,期間做了一些修修補補整體沒什么大的改動。2.0算是發布之后第一個大的版本更新,帶來了許多新功能新特性,也修復了一些已知的bug,在此感謝在博客、Issue和QQ群中提出各種意見的朋友,以及指導過我的前輩大佬們。
在我看來,這個項目沒有使用任何高深的技術和架構,甚至有些代碼寫的自己都不滿意不敢拿出來給大家觀賞,和社區中其他一些開源項目的大佬們比起來自慚形穢。但是這幾個月陸續收到一些小伙伴的支持和鼓勵,也被一些源碼網站收錄和推薦,讓我有勇氣和信心把它繼續做下去,貴在堅持吧。
新版本主要是增加了HTTP任務調度以及節點管理功能,開發過程中重構了部分代碼,本來還打算完善一下單元測試,由于時間關系無奈延后了。
不太熟悉的朋友可以看下之前的介紹:
https://www.cnblogs.com/hohoa/p/12162581.html
https://www.cnblogs.com/hohoa/p/12197518.html
新版本特性
完善了任務生命周期事件
任務列表支持節點名稱搜索和顯示優化
支持配置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任務
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更多的等著你來慢慢探索~
未來展望
本項目始終秉持部署簡單+操作簡單的核心理念持續進行迭代更新,積極響應各方的建議和需求,為開源社區添磚加瓦~
作者唯一開源地址:
https://github.com/hey-hoho/ScheduleMasterCore
https://gitee.com/hey-hoho/ScheduleMasterCore?(只從github同步)
文檔(還在逐步更新中):
https://github.com/hey-hoho/ScheduleMasterCore/wiki
感謝大家支持~
總結
以上是生活随笔為你收集整理的.NET Core下的开源分布式任务调度系统ScheduleMaster-v2.0低调发布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在.NET Core中用最原生的方式读取
- 下一篇: 后端开发都应该了解点接口的压力测试(Ap