从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