iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >.NET Core分布式任务调度ScheduleMaster怎么使用
  • 851
分享到

.NET Core分布式任务调度ScheduleMaster怎么使用

2023-06-30 17:06:27 851人浏览 薄情痞子
摘要

今天小编给大家分享一下.net Core分布式任务调度ScheduleMaster怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面

今天小编给大家分享一下.net Core分布式任务调度ScheduleMaster怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1.什么是ScheduleMaster

ScheduleMaster是分布式任务调度系统,是国内的一位开发者写的。简称:集中任务调度系统,最简单的理解ScheduleMaster,就是对不同的系统里面的调度任务做统一管理的框架

例如我们现在有多个系统,每个系统针对自己处理不同的业务场景。衍生出自己的调度任务,想象一下,如果每个系统人为去维护,那随着调度任务越来越多,人是崩溃的吧,可见维护和技术成本是巨大的,这时我们需要选择分布式任务系统框架做统一的管理

.NET Core分布式任务调度ScheduleMaster怎么使用

当然有目前有很多相对优秀分布式任务系统框架,我们主要学习 ScheduleMaster

2.使用ScheduleMaster

首先我们需要使用Net Core WEB api创建几个模拟的微服务,分别为 考勤、算薪、邮件、短信

.NET Core分布式任务调度ScheduleMaster怎么使用

下载开源的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

.NET Core分布式任务调度ScheduleMaster怎么使用

进入Hos.ScheduleMaster.Web项目的发布目录,dotnet Hos.ScheduleMaster.Web.dll启动项目 ,此时会生成数据库

登录账号:admin

密码:111111

进入Hos.ScheduleMaster.QuartzHost项目的发布目录,执行命令,启动项目

dotnet Hos.ScheduleMaster.QuartzHost.dll --urls Http://*:30003

1.配置Http调度任务

准备就绪后,使用后台查看节点管理,可以看到web主节点30000和任务调度的接口30002已经在运行

.NET Core分布式任务调度ScheduleMaster怎么使用

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

.NET Core分布式任务调度ScheduleMaster怎么使用

2.配置程序集调度任务

创建一个类库,安装ScheduleMaster库, 创建一个类继承TaskBase,实现抽象方法,然后编译程序集

namespace TaskExcuteService{    class AssemblyTask : TaskBase    {        public override void Run(TaskContext context)        {            context.WriteLog("程序集任务");        }    }}

找到debug目录,去掉Base程序集,然后添加为压缩文件

在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"));

所有接口采用统一的返回格式,字段如下:

参数名称参数类型说明
Successbool是否成功
Statusint结果状态,0-请求失败 1-请求成功 2-登录失败 3-参数异常 4-数据异常
Messagestring返回的消息
Dataobject返回的数据

2.创建程序集任务

使用API创建任务的方式不支持上传程序包,所以在任务需要启动时要确保程序包已通过其他方式上传,否则会启动失败。

  • 接口地址:http://yourip:30000/api/task/create

  • 请求类型:POST

  • 参数格式:application/x-www-form-urlencoded

  • 返回结果:创建成功返回任务id

  • 参数列表:

参数名称参数类型是否必填说明
MetaTypeint任务类型,这里固定是1
Titlestring任务名称
RunLoopbool是否按周期执行
CronExpressionstringcron表达式,如果RunLoop为true则必填
AssemblyNamestring程序集名称
ClassNamestring执行类名称,包含完整命名空间
StartDateDateTime任务开始时间
EndDateDateTime任务停止时间,为空表示不限停止时间
Remarkstring任务描述说明
KeepersList<int>监护人id
NextsList<guid>子级任务id
ExecutorsList<string>执行节点名称
RunNowbool创建成功是否立即启动
ParamsList<ScheduleParam>自定义参数列表,也可以通过CustomParamsJSON字段直接传json格式字符串

ScheduleParam:

参数名称参数类型是否必填说明
ParamKeystring参数名称
ParamValuestring参数值
ParamRemarkstring参数说明
HttpClient client = new HttpClient();List<KeyValuePair<string, string>> args = new List<KeyValuePair<string, string>>();args.Add(new KeyValuePair<string, string>("MetaType", "1"));args.Add(new KeyValuePair<string, string>("RunLoop", "true"));args.Add(new KeyValuePair<string, string>("CronExpression", "33 0/8 * * * ?"));args.Add(new KeyValuePair<string, string>("Remark", "By Xunit Tester Created"));args.Add(new KeyValuePair<string, string>("StartDate", DateTime.Today.ToString("yyyy-MM-dd HH:mm:ss")));args.Add(new KeyValuePair<string, string>("Title", "程序集接口测试任务"));args.Add(new KeyValuePair<string, string>("AssemblyName", "Hos.ScheduleMaster.Demo"));args.Add(new KeyValuePair<string, string>("ClassName", "Hos.ScheduleMaster.Demo.Simple"));args.Add(new KeyValuePair<string, string>("CustomParamsJson", "[{\"ParamKey\":\"k1\",\"ParamValue\":\"1111\",\"ParamRemark\":\"r1\"},{\"ParamKey\":\"k2\",\"ParamValue\":\"2222\",\"ParamRemark\":\"r2\"}]"));args.Add(new KeyValuePair<string, string>("Keepers", "1"));args.Add(new KeyValuePair<string, string>("Keepers", "2"));//args.Add(new KeyValuePair<string, string>("Nexts", ""));//args.Add(new KeyValuePair<string, string>("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

  • 参数列表:

参数名称参数类型是否必填说明
MetaTypeint任务类型,这里固定是2
Titlestring任务名称
RunLoopbool是否按周期执行
CronExpressionstringcron表达式,如果RunLoop为true则必填
StartDateDateTime任务开始时间
EndDateDateTime任务停止时间,为空表示不限停止时间
Remarkstring任务描述说明
HttpRequestUrlstring请求地址
HttpMethodstring请求方式,仅支持GET\POST\PUT\DELETE
HttpContentTypestring参数格式,仅支持application/json和application/x-www-form-urlencoded
HttpHeadersstring自定义请求头,ScheduleParam列表的json字符串
HttpBodystring如果是json格式参数,则是对应参数的json字符串;如果是form格式参数,则是对应ScheduleParam列表的json字符串。
KeepersList<int>监护人id
NextsList<guid>子级任务id
ExecutorsList<string>执行节点名称
RunNowbool创建成功是否立即启动
HttpClient client = new HttpClient();List<KeyValuePair<string, string>> args = new List<KeyValuePair<string, string>>();args.Add(new KeyValuePair<string, string>("MetaType", "2"));args.Add(new KeyValuePair<string, string>("RunLoop", "true"));args.Add(new KeyValuePair<string, string>("CronExpression", "22 0/8 * * * ?"));args.Add(new KeyValuePair<string, string>("Remark", "By Xunit Tester Created"));args.Add(new KeyValuePair<string, string>("StartDate", DateTime.Today.ToString("yyyy-MM-dd HH:mm:ss")));args.Add(new KeyValuePair<string, string>("Title", "Http接口测试任务"));args.Add(new KeyValuePair<string, string>("HttpRequestUrl", "http://localhost:56655/api/1.0/value/jsonpost"));args.Add(new KeyValuePair<string, string>("HttpMethod", "POST"));args.Add(new KeyValuePair<string, string>("HttpContentType", "application/json"));args.Add(new KeyValuePair<string, string>("HttpHeaders", "[]"));args.Add(new KeyValuePair<string, string>("HttpBody", "{ \"Posts\": [{ \"PostId\": 666, \"Title\": \"tester\", \"Content\":\"testtesttest\" }], \"BlogId\": 111, \"Url\":\"qweqrrttryrtyrtrtrt\" }"));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);

4.创建延时任务

  • 接口地址:http://yourip:30000/api/delaytask/create

  • 请求类型:POST

  • 参数格式:application/x-www-form-urlencoded

  • 返回结果:创建成功返回任务id

  • 参数列表:

参数名称参数类型是否必填说明
SourceAppstring来源
Topicstring主题
ContenTKEystring业务关键字
DelayTimeSpanint延迟相对时间
DelayAbsoluteTimeDateTime延迟绝对时间
NotifyUrlstring回调地址
NotifyDataTypestring回调参数格式,仅支持application/json和application/x-www-form-urlencoded
NotifyBodystring回调参数,json格式字符串
for (int i = 0; i < 5; i++){    int rndNum = new Random().Next(20, 500);    List<KeyValuePair<string, string>> args = new List<KeyValuePair<string, string>>();    args.Add(new KeyValuePair<string, string>("SourceApp", "TestApp"));    args.Add(new KeyValuePair<string, string>("Topic", "TestApp.Trade.TimeoutCancel"));    args.Add(new KeyValuePair<string, string>("ContentKey", i.ToString()));    args.Add(new KeyValuePair<string, string>("DelayTimeSpan", rndNum.ToString()));    args.Add(new KeyValuePair<string, string>("DelayAbsoluteTime", DateTime.Now.AddSeconds(rndNum).ToString("yyyy-MM-dd HH:mm:ss")));    args.Add(new KeyValuePair<string, string>("NotifyUrl", "http://localhost:56655/api/1.0/value/delaypost"));    args.Add(new KeyValuePair<string, string>("NotifyDataType", "application/json"));    args.Add(new KeyValuePair<string, string>("NotifyBody", "{ \"Posts\": [{ \"PostId\": 666, \"Title\": \"tester\", \"Content\":\"testtesttest\" }], \"BlogId\": 111, \"Url\":\"qweqrrttryrtyrtrtrt\" }"));    HttpContent reqContent = new FormUrlEncodedContent(args);    var response = await client.PostAsync("http://localhost:30000/api/DelayTask/Create", reqContent);    var content = await response.Content.ReadAsStringAsync();    Debug.WriteLine(content);}

4.框架简单分析

1.全局设计

根据官网的设计图,以及操作的流程,简单总结一下任务全局流程为客户端&mdash;&ndash;>master&mdash;&mdash;>work&mdash;&ndash;>执行任务。从大的架构方向的思想就是,将原有单个服务中业务和任务调度混合的方式做一些改变,使业务和调度分离,专门把任务调度部分剥离出来,作为一个独立的进程,来统一调用和管理任务,而原有服务只做业务处理。

.NET Core分布式任务调度ScheduleMaster怎么使用

2.Master和Work分析

我们主要从主节点,从节点,数据表这几个方面来简单分析,整个业务的时序流程,从本质来看并不复杂master和Work之间的关系是相互配合的,可能乍一看下面整个图有点混乱,下面来解释一下,其实Master节点将任务添加到数据中,然后work节点,去从对应的数据表中取出任务数据,然后根据任务对应的配置,生成配置信息,调用Quartz执行任务,这就是我们整个框架中最核心的业务。

.NET Core分布式任务调度ScheduleMaster怎么使用

当然master和work除了主要承载了整个管理系统的UI可视化、后台业务操作、任务执行之外,如果从细节以及实现方式来说主要做了以下事情:

Master

  • 分配任务执行和选择节点

  • 对work节点进行健康检查,对任务进行故障转移

Work

  • 取出任务配置信息

  • 使用Quartz根据配置运行任务

  • 使用反射调用程序集

  • 使用httpclient调用http 接口

以上就是“.NET Core分布式任务调度ScheduleMaster怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: .NET Core分布式任务调度ScheduleMaster怎么使用

本文链接: https://www.lsjlt.com/news/330543.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .NET Core分布式任务调度ScheduleMaster怎么使用
    今天小编给大家分享一下.NET Core分布式任务调度ScheduleMaster怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面...
    99+
    2023-06-30
  • .NET Core 分布式任务调度ScheduleMaster详解
    目录1.什么是ScheduleMaster2.使用ScheduleMaster1.配置Http调度任务2.配置程序集调度任务3.使用Api接入任务1.API Server 对接流程2...
    99+
    2024-04-02
  • java分布式任务调度怎么实现
    实现Java分布式任务调度可以使用以下方法:1. 使用Quartz:Quartz是一个功能强大的开源任务调度框架,可以在Java应用...
    99+
    2023-10-23
    java
  • web分布式定时任务调度框架怎么使用
    这篇文章主要讲解了“web分布式定时任务调度框架怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web分布式定时任务调度框架怎么使用”吧!一、业务背景1.1 为什么需要使用定时任务调度...
    99+
    2023-06-04
  • 怎么分析ZooKeeper分布式任务调度中心
    怎么分析ZooKeeper分布式任务调度中心,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一: 背景软件系统中,定时任务往往不可或缺,大家可能会采用Spring qu...
    99+
    2023-06-04
  • .net任务调度框架Hangfire怎么使用
    这篇文章主要讲解了“.net任务调度框架Hangfire怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.net任务调度框架Hangfire怎么使用”吧!简单使用:这里就简单的演示.n...
    99+
    2023-07-02
  • .net任务调度框架FluentScheduler怎么使用
    这篇文章主要介绍“.net任务调度框架FluentScheduler怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.net任务调度框架FluentScheduler怎么使用”文章能帮助大家解...
    99+
    2023-07-02
  • 分布式计算:使用Go WaitGroup开发分布式任务调度系统
    分布式计算是一种将计算任务分发到多台计算机上执行的方式,可以提高任务的并行处理能力和计算速度。Go语言中的WaitGroup是一种用...
    99+
    2023-10-08
    Golang
  • 利用Redis实现分布式任务调度
    利用Redis实现分布式任务调度随着业务的扩展和系统的发展,很多业务都需要实现分布式任务调度,以确保任务能够在多个节点上同时执行,从而提高系统的稳定性和可用性。而Redis作为一款高性能的内存数据存储产品,具备分布式、高可用、高性能等特点,...
    99+
    2023-11-07
    分布式 redis 任务调度
  • SpringBoot怎么整合XxlJob分布式任务调度平台
    这篇文章主要介绍“SpringBoot怎么整合XxlJob分布式任务调度平台”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot怎么整合XxlJob分布式任务调度平台”文章能帮助大家解...
    99+
    2023-07-05
  • SpringBoot整合XxlJob分布式任务调度平台
    目录1.XxlJob简介2.XxlJob快速入门2.1 下载源码仓库地址2.2 定时任务实现步骤3.SpringBoot整合XxlJob3.1 创建SpringBoot工程引入依赖3...
    99+
    2023-02-28
    SpringBoot整合XxlJob SpringBoot分布式任务调度平台
  • 分布式任务调度xxl-job问题解决
    目录前言xxl-job简介功能如下快速入门2.1 初始化“调度数据库”2.2 编译源码2.3 配置部署“调度中心”2.4 配置部署&l...
    99+
    2024-04-02
  • Storm的分布式任务调度机制是怎样的
    Storm的分布式任务调度机制是基于一个称为Nimbus的主节点来进行任务调度和协调工作。Nimbus负责接收拓扑结构、分配任务给S...
    99+
    2024-04-02
  • 如何使用Redis和PowerShell开发分布式任务调度功能
    如何使用Redis和PowerShell开发分布式任务调度功能现如今,随着云计算和大数据技术的发展,分布式系统已经成为日常开发中不可或缺的一部分。在分布式系统中,一项常见的需求是实现任务的分发和调度。本文将介绍如何使用Redis和Power...
    99+
    2023-10-22
    - Redis - PowerShell - 分布式任务调度
  • Java中怎么利用Redis 实现一个分布式任务调度器
    Java中怎么利用Redis 实现一个分布式任务调度器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码实例在深入讲解实现方法之前,我们先...
    99+
    2024-04-02
  • 【分布式任务调度】二、Elastic-Job详细介绍
    Elastic-Job 一、What is elastic-job?Elastic-Job-LiteElastic-Job-CloudElastic-job开发环境要求Elastic-Job配置开发1、 使用Java配置方式启动2、...
    99+
    2023-08-30
    java 开发语言
  • 如何解决分布式任务调度xxl-job问题
    这篇文章主要为大家展示了“如何解决分布式任务调度xxl-job问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决分布式任务调度xxl-job问题”这篇文章吧。xxl-job简介XXL-J...
    99+
    2023-06-29
  • spring分布式调度怎么实现
    实现Spring分布式调度可以使用以下几种方式: 使用Spring Cloud的任务调度模块。Spring Cloud提供了一个...
    99+
    2023-10-27
    spring
  • .net core 使用阿里云分布式日志的配置方法
    前言 好久没有出来夸白了,今天教大家简单的使用阿里云分布式日志,来存储日志,没有阿里云账号的,可以免费注册一个 开通阿里云分布式日志(有一定的免费额度,个人测试学习完全没问题的,香...
    99+
    2024-04-02
  • java任务调度quartz怎么使用
    要使用Quartz任务调度器,您需要按照以下步骤进行操作:1. 首先,您需要添加Quartz的依赖项到您的项目中。您可以在Maven...
    99+
    2023-08-14
    java quartz
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作