您现在的位置是:网站首页> 编程资料编程资料
.NET Core 分布式任务调度ScheduleMaster详解_应用技巧_
2023-05-25
555人已围观
简介 .NET Core 分布式任务调度ScheduleMaster详解_应用技巧_
1.什么是ScheduleMaster
ScheduleMaster是分布式任务调度系统,是国内的一位开发者写的。简称:集中任务调度系统,最简单的理解ScheduleMaster,就是对不同的系统里面的调度任务做统一管理的框架。
例如我们现在有多个系统,每个系统针对自己处理不同的业务场景。衍生出自己的调度任务,想象一下,如果每个系统人为去维护,那随着调度任务越来越多,人是崩溃的吧,可见维护和技术成本是巨大的,这时我们需要选择分布式任务系统框架做统一的管理

当然有目前有很多相对优秀分布式任务系统框架,我们主要学习 ScheduleMaster
2.使用ScheduleMaster
1.首先我们需要使用NET Core web Api创建几个模拟的微服务,分别为 考勤、算薪、邮件、短信

2.下载开源的ScheduleMaster,并且使用ScheduleMaster调度我们的微服务接口
- sqlserver:"Persist Security Info = False; User ID =sa; Password =123456; Initial Catalog =schedule_master; Server =."
- postgresql:"Server=localhost;Port=5432;Database=schedule_master;User Id=postgres;Password=123456;Pooling=true;MaxPoolSize=20;"
- mysql:"Data Source=localhost;Database=schedule_master;User ID=root;Password=123456;pooling=true;CharSet=utf8mb4;port=3306;sslmode=none;TreatTinyAsBoolean=true"
修改Host的配置文件和支持的数据库,框架默认使用Mysql
修改Web的配置文件和支持的数据库,框架默认使用Mysql

3.进入Hos.ScheduleMaster.Web项目的发布目录,dotnet Hos.ScheduleMaster.Web.dll启动项目 ,此时会生成数据库
登录账号:admin
密码:111111
4.进入Hos.ScheduleMaster.QuartzHost项目的发布目录,执行命令,启动项目
dotnet Hos.ScheduleMaster.QuartzHost.dll --urls http://*:30003
1.配置Http调度任务
5.准备就绪后,使用后台查看节点管理,可以看到web主节点30000和任务调度的接口30002已经在运行

6.使用任务列表菜单,创建定时调度任务,配置基础信息和元数据配置,然后点击保存就开始执行任务

2.配置程序集调度任务
1.创建一个类库,安装ScheduleMaster库, 创建一个类继承TaskBase,实现抽象方法,然后编译程序集
namespace TaskExcuteService { class AssemblyTask : TaskBase { public override void Run(TaskContext context) { context.WriteLog("程序集任务"); } } }2.找到debug目录,去掉Base程序集,然后添加为压缩文件
3.在web界面找到任务配置,选择程序集进行基本配置,配置元数据,输入程序集名称,然后输入类,并将程序集上传,保存就可以运行了
3.使用Api接入任务
为了方便业务系统更好的接入调度系统,ScheduleMaster创建任务不仅可以在控制台中实现,系统也提供了WebAPI供业务系统使用代码接入,这种方式对延时任务来说尤其重要。
1.API Server 对接流程
- 在控制台中创建好专用的API对接用户账号。
- 使用对接账号的用户名设置为http header中的
ms_auth_user值。 - 使用经过哈希运算过的秘钥设置为http header中的
ms_auth_secret值,计算规则:按{用户名}{hash(密码)}{用户名}的格式拼接得到字符串str,然后再对str做一次hash运算即得到最终秘钥,hash函数是小写的32位MD5算法。 - 使用form格式发起http调用,如果非法用户会返回401-Unauthorized。
HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("ms_auth_user", "admin"); client.DefaultRequestHeaders.Add("ms_auth_secret", SecurityHelper.MD5($"admin{SecurityHelper.MD5("111111")}}admin"));所有接口采用统一的返回格式,字段如下:
| 参数名称 | 参数类型 | 说明 |
|---|---|---|
| Success | bool | 是否成功 |
| Status | int | 结果状态,0-请求失败 1-请求成功 2-登录失败 3-参数异常 4-数据异常 |
| Message | string | 返回的消息 |
| Data | object | 返回的数据 |
2.创建程序集任务
使用API创建任务的方式不支持上传程序包,所以在任务需要启动时要确保程序包已通过其他方式上传,否则会启动失败。
- 接口地址:
http://yourip:30000/api/task/create - 请求类型:
POST - 参数格式:
application/x-www-form-urlencoded - 返回结果:创建成功返回任务id
- 参数列表:
| 参数名称 | 参数类型 | 是否必填 | 说明 |
|---|---|---|---|
| MetaType | int | 是 | 任务类型,这里固定是1 |
| Title | string | 是 | 任务名称 |
| RunLoop | bool | 是 | 是否按周期执行 |
| CronExpression | string | 否 | cron表达式,如果RunLoop为true则必填 |
| AssemblyName | string | 是 | 程序集名称 |
| ClassName | string | 是 | 执行类名称,包含完整命名空间 |
| StartDate | DateTime | 是 | 任务开始时间 |
| EndDate | DateTime | 否 | 任务停止时间,为空表示不限停止时间 |
| Remark | string | 否 | 任务描述说明 |
| Keepers | List | 否 | 监护人id |
| Nexts | List | 否 | 子级任务id |
| Executors | List | 否 | 执行节点名称 |
| RunNow | bool | 否 | 创建成功是否立即启动 |
| Params | List | 否 | 自定义参数列表,也可以通过CustomParamsJson字段直接传json格式字符串 |
ScheduleParam:
| 参数名称 | 参数类型 | 是否必填 | 说明 |
|---|---|---|---|
| ParamKey | string | 是 | 参数名称 |
| ParamValue | string | 是 | 参数值 |
| ParamRemark | string | 否 | 参数说明 |
HttpClient client = new HttpClient(); List> args = new List >(); args.Add(new KeyValuePair ("MetaType", "1")); args.Add(new KeyValuePair ("RunLoop", "true")); args.Add(new KeyValuePair ("CronExpression", "33 0/8 * * * ?")); args.Add(new KeyValuePair ("Remark", "By Xunit Tester Created")); args.Add(new KeyValuePair ("StartDate", DateTime.Today.ToString("yyyy-MM-dd HH:mm:ss"))); args.Add(new KeyValuePair ("Title", "程序集接口测试任务")); args.Add(new KeyValuePair ("AssemblyName", "Hos.ScheduleMaster.Demo")); args.Add(new KeyValuePair ("ClassName", "Hos.ScheduleMaster.Demo.Simple")); args.Add(new KeyValuePair ("CustomParamsJson", "[{\"ParamKey\":\"k1\",\"ParamValue\":\"1111\",\"ParamRemark\":\"r1\"},{\"ParamKey\":\"k2\",\"ParamValue\":\"2222\",\"ParamRemark\":\"r2\"}]")); args.Add(new KeyValuePair ("Keepers", "1")); args.Add(new KeyValuePair ("Keepers", "2")); //args.Add(new KeyValuePair ("Nexts", "")); //args.Add(new KeyValuePair ("Executors", "")); HttpContent reqContent = new FormUrlEncodedContent(args); var response = await client.PostAsync("http://localhost:30000/api/Task/Create", reqContent); var content = await response.Content.ReadAsStringAsync(); Debug.WriteLine(content);
3.创建HTTP任务
- 接口地址:
http://yourip:30000/api/task/create - 请求类型:
POST - 参数格式:
application/x-www-form-urlencoded - 返回结果:创建成功返回任务id
- 参数列表:
| 参数名称 | 参数类型 | 是否必填 | 说明 |
|---|---|---|---|
| MetaType | int | 是 | 任务类型,这里固定是2 |
| Title | string | 是 | 任务名称 |
| RunLoop | bool | 是 | 是否按周期执行 |
| CronExpression | string | 否 | cron表达式,如果RunLoop为true则必填 |
| StartDate | DateTime | 是 | 任务开始时间 |
| EndDate | DateTime | 否 | 任务停止时间,为空表示不限停止时间 |
| Remark | string | 否 | 任务描述说明 |
| HttpRequestUrl | string | 是 | 请求地址 |
| HttpMethod | string | 是 | 请求方式,仅支持GET\POST\PUT\DELETE |
| HttpContentType | string | 是 | 参数格式,仅支持application/json和application/x-www-form-urlencoded |
| HttpHeaders | string | 否 | 自定义请求头,ScheduleParam列表的json字符串 |
| HttpBody | string | 是 | 如果是json格式参数,则是对应参数的json字符串;如果是form格式参数,则是对应ScheduleParam列表的json字符串。 |
| Keepers | List | 否 | 监护人id |
| Nexts | List | 否 | 子级任务id |
| Executors | List | 否 | 执行节点名称 |
| RunNow | bool | 否 | 创建成功是否立即启动 |
HttpClient client = new HttpClient(); List> args = new List >(); args.Add(new KeyValuePair ("MetaType", "2")); args.Add(new KeyValuePair ("RunLoop", "true")); args.Add(new KeyValuePair ("CronExpression", "22 0/8 * * * ?")); args.Add(new KeyValuePair ("Remark", "By Xunit Tester Created")); args.Add(new KeyValuePair ("StartDate", DateTime.Today.ToString("yyyy-MM-dd HH:mm:ss"))); args.Add(new KeyValuePair ("Title", "Http接口测试任务")); args.Add(new KeyValuePair 提示: 本文由神整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
相关内容
- ASP.Net MVC利用NPOI导入导出Excel的示例代码_应用技巧_
- 关于WPF WriteableBitmap类直接操作像素点的问题_应用技巧_
- Python数据分析JupyterNotebook3魔法命令详解及示例_ASP编程_
- asp与php中定时生成页面的思路与代码_应用技巧_
- asp取整数mod 有小数的就自动加1_应用技巧_
- ASP动态include文件_ASP基础_
- 面向小白visual studio 2019 添加第三方库教程(入门)_应用技巧_
- 在.NET Core 中使用 FluentValidation 进行规则验证的方法_应用技巧_
- C语言数组添加和删除元素的实现_应用技巧_
- msxml3.dll 错误 800c0019 系统错误:-2146697191解决方法_应用技巧_
点击排行
本栏推荐
