当前位置: 移动技术网 > IT编程>开发语言>.net > .NET Core下的开源分布式任务调度系统ScheduleMaster-v2.0低调发布

.NET Core下的开源分布式任务调度系统ScheduleMaster-v2.0低调发布

2020年04月27日  | 移动技术网IT编程  | 我要评论

龙湖好望山,巨人马场,唐慧女儿乐乐生活照

从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);


未来展望

本项目始终秉持部署简单+操作简单的核心理念持续进行迭代更新,积极响应各方的建议和需求,为开源社区添砖加瓦~

作者唯一开源地址github stars github forks

文档(还在逐步更新中):

感谢大家支持~

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网