从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://cloud.tencent.com/developer/support-plan?invite_code=oeevm2f6y7qt

.NET Core下的开源分布式任务调度系统ScheduleMaster-v2.0低调发布的更多相关文章

  1. Asp.Net Core下的开源任务调度平台ScheduleMaster—快速上手

    概述 ScheduleMaster是一个开源的分布式任务调度系统,它基于Asp.Net Core平台构建,支持跨平台多节点部署运行. 它的项目主页在这里: https://github.com/hey ...

  2. 宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程

    一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背 ...

  3. 分布式任务调度系统:xxl-job

    任务调度,通俗来说实际上就是"定时任务",分布式任务调度系统,翻译一下就是"分布式环境下定时任务系统". xxl-job一个分布式任务调度平台,其核心设计目标是 ...

  4. 开源分布式Job系统,调度与业务分离-如何创建一个计划HttpJob任务

    项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立 ...

  5. 开源分布式Job系统,调度与业务分离-如何创建周期性的HttpJob任务

    项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立 ...

  6. 开源分布式Job系统,调度与业务分离-HttpJob.Agent组件介绍以及如何使用

    项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立 ...

  7. 基于nginx+xxl-job+springboot高可用分布式任务调度系统

    技术.原理讲解: <分布式任务调度平台XXL-JOB--源码解析一:项目介绍> <分布式任务调度平台XXL-JOB--源码解析二:基于docker搭建admin调度中心和execut ...

  8. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布

    (新年巨献) RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布 历时数月,RDIFramework.NET V2.8版本发布了,感谢大家的支持. RDIFram ...

  9. 分布式任务调度系统xxl-job搭建

    为解决分布式环境下定时任务的可靠性,稳定性,只执行一次的特性,我找到了个大众点评开源的分布式调度任务解决完整系统,下面我将一步步深入解读该系统,从基本的使用到源码的探究 下载 https://gith ...

随机推荐

  1. Java——写一个求和 “方法”

    在c语言中叫做函数 撸代码: import java.math.*; import java.util.Scanner; /*导入一个 math包 * BigDecimal 精确小数 * BigInt ...

  2. ICPC训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019

    I题 求 a 数组平方的前缀和和求 a 数组后缀和,遍历一遍即可 AC代码 #include<iostream>#include<cmath>using namespace s ...

  3. Infrared-Visible Cross-Modal Person Re-Identification with an X Modality (AAAI 2020)

    Infrared-Visible Cross-Modal Person Re-Identification with an X Modality (AAAI 2020) 1. Motivation 可见 ...

  4. Java常用类__装箱/拆箱

    以下是常用的各两种方法(各类提供了构造方法,静态方法) 一.基本数据类型 转化为 包装类(装箱) 例:int i=10: Integer num=i;//num=10 二.包装类 转化为  基本数据类 ...

  5. 从汇编代码理解 Block 的内存结构

    ❓ 在断点调试 iOS 程序碰到 block 作为函数的形参时,如果想知道该 block 本身的函数签名信息和函数体地址时,有哪些办法?

  6. 《Three.js 入门指南》2.4.1- 照相机 - 透视投影demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 《Three.js 入门指南》1.3 - Three JS 功能预览

    [部分中英文对照] Cameras(照相机,控制投影方式) Camera OrthographicCamera 正交相机 PerspectiveCamera 透视相机 Core(核心对象) Buffe ...

  8. 1068 Find More Coins (30分)(dp)

    Eva loves to collect coins from all over the universe, including some other planets like Mars. One d ...

  9. Pytest系列(11)- 失败重跑插件pytest-rerunfailures详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 环境前提 以下先决条件才能使用py ...

  10. java仿win7计算器布局

    代码: package calculator; import javax.swing.*; import java.awt.*; import java.awt.event.*; public cla ...