.NET Core下的开源分布式任务调度系统ScheduleMaster-v2.0低调发布
从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://gitee.com/hey-hoho/ScheduleMasterCore (只从github同步)
文档(还在逐步更新中):
感谢大家支持~
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=oeevm2f6y7qt
.NET Core下的开源分布式任务调度系统ScheduleMaster-v2.0低调发布的更多相关文章
- Asp.Net Core下的开源任务调度平台ScheduleMaster—快速上手
概述 ScheduleMaster是一个开源的分布式任务调度系统,它基于Asp.Net Core平台构建,支持跨平台多节点部署运行. 它的项目主页在这里: https://github.com/hey ...
- 宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程
一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背 ...
- 分布式任务调度系统:xxl-job
任务调度,通俗来说实际上就是"定时任务",分布式任务调度系统,翻译一下就是"分布式环境下定时任务系统". xxl-job一个分布式任务调度平台,其核心设计目标是 ...
- 开源分布式Job系统,调度与业务分离-如何创建一个计划HttpJob任务
项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立 ...
- 开源分布式Job系统,调度与业务分离-如何创建周期性的HttpJob任务
项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立 ...
- 开源分布式Job系统,调度与业务分离-HttpJob.Agent组件介绍以及如何使用
项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立 ...
- 基于nginx+xxl-job+springboot高可用分布式任务调度系统
技术.原理讲解: <分布式任务调度平台XXL-JOB--源码解析一:项目介绍> <分布式任务调度平台XXL-JOB--源码解析二:基于docker搭建admin调度中心和execut ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布
(新年巨献) RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布 历时数月,RDIFramework.NET V2.8版本发布了,感谢大家的支持. RDIFram ...
- 分布式任务调度系统xxl-job搭建
为解决分布式环境下定时任务的可靠性,稳定性,只执行一次的特性,我找到了个大众点评开源的分布式调度任务解决完整系统,下面我将一步步深入解读该系统,从基本的使用到源码的探究 下载 https://gith ...
随机推荐
- spring-cloud-gateway静态路由
为什么引入 API 网关 使用 API 网关后的优点如下: 易于监控.可以在网关收集监控数据并将其推送到外部系统进行分析. 易于认证.可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个 ...
- [React]核心概念
本文是对React文档:核心概念部分的笔记,内容大致与文档相同. 文档链接 React哲学部分写的很好,务必要看 JSX JSX是JS的语法扩展,配合react使用,为JS和HTML的混写 JSX支持 ...
- js函数基础回顾
回头又跑去看了下尚硅谷的js基础视频 https://www.bilibili.com/video/av22958172/?p=51. 便做了如下笔记: 1.函数也是一个对象 2.函数可以封装一些功能 ...
- 机器学习——详解KD-Tree原理
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习的第15篇文章,之前的文章当中讲了Kmeans的相关优化,还讲了大名鼎鼎的EM算法.有些小伙伴表示喜欢看这些硬核的,于是今天上 ...
- iOS 编程之UIWindow切换
由于最近项目需要制作一个可定制的底部弹窗效果,因此研究了一下UIActionSheet,打算重写一个自定义的弹窗,在写demo的时候出于偷懒的原因,直接在新建项目的 - (void)viewDidLo ...
- vulnhub~Djinn:2
这道题挺难的,和Djinn:1相比,正如作者所言,有许多相似的地方.仍然开放着端口 可以看到5个端口开放着,1337是web端口,这里面如djinn1一样,write your wish,但是send ...
- Linux yum 源配置
CentOS 7 使用 163 的 yum 源,配置步骤如下: 下载镜像源文件 http://mirrors.163.com/.help/centos.html 备份原配置文件,将下载的文件的名字改成 ...
- PTA数据结构与算法题目集(中文) 7-33
PTA数据结构与算法题目集(中文) 7-33 7-33 地下迷宫探索 (30 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的 ...
- docker 容器容器之间网络通信 docker-compose.yaml 配置固定ip
1.创建自己的桥接网络 $ docker network create --subnet=172.18.0.0/16 mynetwork 2.docker-compose.yaml 文件格式demo ...
- 怎样让scratch里的人物两腿走动
需要人物角色至少有两个“造型”,表现走路时的两个动作.以默认的“小猫”觉色为例,它有两个“造型”,可以用来表现奔跑的动作. 但是要想让小猫跑起来,需要脚本来实现,简单跑动脚本如下 scratch学习视 ...