前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET Core下的开源分布式任务调度系统ScheduleMaster-v2.0低调发布

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

作者头像
HOHO
发布2020-04-27 17:23:40
7490
发布2020-04-27 17:23:40
举报

从1月份首次公开介绍这个项目到现在也快4个月了,期间做了一些修修补补整体没什么大的改动。2.0算是发布之后第一个大的版本更新,带来了许多新功能新特性,也修复了一些已知的bug,在此感谢在博客、Issue和QQ群中提出各种意见的朋友,以及指导过我的前辈大佬们。

在我看来,这个项目没有使用任何高深的技术和架构,甚至有些代码写的自己都不满意不敢拿出来给大家观赏,和社区中其他一些开源项目的大佬们比起来自惭形秽。但是这几个月陆续收到一些小伙伴的支持和鼓励,也被一些源码网站收录和推荐,让我有勇气和信心把它继续做下去,贵在坚持吧。

新版本主要是增加了HTTP任务调度以及节点管理功能,开发过程中重构了部分代码,本来还打算完善一下单元测试,由于时间关系无奈延后了。

不太熟悉的朋友可以看下之前的介绍:

新版本特性

  • 完善了任务生命周期事件
  • 任务列表支持节点名称搜索和显示优化
  • 支持配置HTTP任务
  • 支持节点手动管理
  • 支持在程序集任务中指定自定义配置文件
  • 支持长任务取消
  • 新增了一些系统策略配置
  • 新增了动态参数启动,对容器部署更友好
  • 推出正式文档
  • 补充了一些使用demo
  • 修复若干bug

本次更新稍有遗憾的是对HTTP任务授权认证处理这块,我所了解到的开放API基本都实现了自己的一套签名验证机制,更完善的则会使用OAuth2那一套东西,使用简单BASIC认证或JWT的比较少一些,所以感觉接入BASIC和JWT的意义不大,但是面对五花八门的接口签名或OAuth我暂时也没有太好的方案,只好先给出一个简陋的HTTP调度功能,日后还会继续思考探索把这块加上。

到这里系统的核心调度功能基本差不多了,接下来会重点考虑异步化、资源监控、性能监控和更加自由的策略配置方面的东西。有些朋友也建议能否支持多数据库类型、改成SPA应用等等,这种需求目前不是很紧急,会往后放一放再看。

先睹为快

由于开始维护正式文档,博客中后期会有内容更新不及时,请以github wiki为准。

1、提供了任务初始化入口:

代码语言:javascript
复制
public virtual void Initialize()
{
    ///TODO:
}

我们可以在这里加载自己的配置文件(支持热更新):

代码语言:javascript
复制
    /// <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"]}");
        }
    }
代码语言:javascript
复制
// myconfig.json
{
  "TestKey1": "MyValue1",
  "TestKey2": {
    "Name": "hoho",
    "Age": 18
  }
}

或者做一些DI绑定的东西:

代码语言:javascript
复制
    /// <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任务

代码语言:javascript
复制
   [HttpPost]
   public string JsonPost(Blog model)
   {
       return "ok";
   }

3、新增的若干配置项

4、禁用自动注册模式,使用master主动创建并接管worker

5、使用命令行传参覆盖配置文件

代码语言:javascript
复制
// docker镜像中的配置文件
{
  "NodeSetting": {
    "IdentityName": "worker1", 
    "Role": "worker", 
    "Protocol": "http", 
    "IP": "localhost", 
    "Port": 30001, 
    "Priority": 1
  }
}
代码语言:javascript
复制
[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

更多的等着你来慢慢探索~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新版本特性
  • 先睹为快
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档