ScheduleMaster 分布式任务调度中心基本使用和原理
@[toc]
一、ScheduleMaster 核心概念
概念统一执多个系统的任务【回收超时订单,清理垃圾信息 】,如图:
二、ScheduleMaster 应用场景
场景主要应用在微服务系统中。如图:
三、ScheduleMaster 项目落地
工具
ScheduleMaster 网盘下载地址:链接:https://pan.baidu.com/s/1LcCHS__zRRJv_HHwsza3cg 提取码:eyup
Demo 项目
步骤
运行 ScheduleMaster
启动命令
Demo 项目
新建一个订单回收 API 接口
新建任务
点击任务列表如图:
点击创建任务按钮->选择 “基础信息配置”如图:
选择“元数据配置”,在点击“保存”即可,如图:
运行结果(每隔 5 秒进行调用订单回收接口),如图:
四、ScheduleMaster 运行原理
原理
Master 概念主节点:协调 Hos.ScheduleMaster.Web
Node 概念工作节点:执行业务 Hos.ScheduleMaster.QuartzHost
数据库用来存储任务信息。
全局架构如图:
执行过程客户端---->Hos.ScheduleMaster.Web(master 节点)---->Hos.ScheduleMaster.QuartzHost(工作节点)---->订单回收接口
master 节点的核心
选择工作节点
指定工作节点,执行任务
工作节点的核心
取出任务配置信息
使用 Quartz 根据配置运行任务
使用 HttpClient 调用接口
使用反射调用程序集方法
五、ScheduleMaster 程序集任务
工具
控制台 Demo 项目
ScheduleMaster
步骤
新建一个 Console 项目
ScheduleMaster 配置
点击“任务列表”目录,点击“创建任务”按钮,任务类型选择“程序集任务”,如图:
六、ScheduleMaster API 接口任务(使用代码自定义创建任务)
实现代码如下:
官方 API
API Server 对接流程对于开放接口来说,使用签名验证已经是必不可少的一环,这是保证系统安全性的重要手段。看一下核心对接流程:
在控制台中创建好专用的 API 对接用户账号。
使用对接账号的用户名设置为 http header 中的
ms_auth_user
值。使用经过哈希运算过的秘钥设置为 http header 中的
ms_auth_secret值
,计算规则:按{用户名}{hash(密码)}{用户名}的格式拼接得到字符串 str,然后再对 str 做一次 hash 运算即得到最终秘钥,hash 函数是小写的 32 位 MD5 算法。使用 form 格式发起 http 调用,如果非法用户会返回 401-Unauthorized。代码示例:
签名验证这块设计的比较简单,具体源码逻辑可以参考Hos.ScheduleMaster.Web.Filters.AccessControlFilter
。
API 返回格式
所有接口采用统一的返回格式,字段如下:
创建程序集任务
接口地址:
http://yourip:30000/api/task/create
请求类型:
POST
参数格式:
application/x-www-form-urlencoded
返回结果:创建成功返回任务 id
参数列表:
ScheduleParam:
代码示例:
创建 HTTP 任务
接口地址:
http://yourip:30000/api/task/create
请求类型:
POST
参数格式:
application/x-www-form-urlencoded
返回结果:创建成功返回任务 id
参数列表:
代码示例:
创建延时任务
接口地址:
http://yourip:30000/api/delaytask/create
请求类型:
POST
参数格式:
application/x-www-form-urlencoded
返回结果:创建成功返回任务 id
参数列表:
代码示例:
七、ScheduleMaster 集群和集群原理
主要针对工作节点使用集群
步骤
进入工作节点项目根目录下【ScheduleMasterCore\Hos.ScheduleMaster.QuartzHost\bin\Release\netcoreapp3.1\publish】,更改配置文件【appsettings.json】, 因为要启动多个节点,只需要更改节点名称和端口号即可【切记:节点名称不能够重复】,如下:
场景
如果当前的工作节点宕机了,会不会转移到其他的工作节点上?需要更改任务的执行节点,选择多个执行节点,如图:
有两个工作节点,30001 和 30002,其中把 30001 宕机了[有个心跳检测的 API 接口,定时任务不断的检测当前的节点是否可用],会直接转移到其他节点执行任务,运行结果如下:
版权声明: 本文为 InfoQ 作者【神秘码农】的原创文章。
原文链接:【http://xie.infoq.cn/article/e3661a617ff5c2a7c04f1f881】。未经作者许可,禁止转载。
评论