安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

分布式任务调度ScheduleMaster

4月24日 囍孤女投稿
  1。什么是ScheduleMaster
  ScheduleMaster是分布式任务调度系统。简称:集中任务调度系统,最简单的理解ScheduleMaster,就是对不同的系统里面的调度任务做统一管理的框架。
  例如我们现在有多个系统,每个系统针对自己处理不同的业务场景。衍生出自己的调度任务,想象一下,如果每个系统人为去维护,那随着调度任务越来越多,人是崩溃的吧,可见维护和技术成本是巨大的,这时我们需要选择分布式任务系统框架做统一的管理
  当然有目前有很多相对优秀分布式任务系统框架,我们主要学习ScheduleMaster2。使用ScheduleMaster
  1。首先我们需要使用NETCorewebApi创建几个模拟的微服务,分别为考勤、算薪、邮件、短信
  2。下载开源的ScheduleMaster,并且使用ScheduleMaster调度我们的微服务接口sqlserver:PersistSecurityInfoFUserIDPassword123456;InitialCServer。postgresql:SPort5432;DUserIPassword123456;PMaxPoolSize20;mysql:DataSDUserIDPassword123456;CharSetutf8mb4;port3306;TreatTinyAsBooleantrue修改Host的配置文件和支持的数据库,框架默认使用Mysql
  修改Web的配置文件和支持的数据库,框架默认使用Mysql
  3。进入Hos。ScheduleMaster。Web项目的发布目录,dotnetHos。ScheduleMaster。Web。dll启动项目,此时会生成数据库登录账号:admin
  密码:111111
  4。进入Hos。ScheduleMaster。QuartzHost项目的发布目录,执行命令,启动项目dotnetHos。ScheduleMaster。QuartzHost。dllurlshttp::300031。配置Http调度任务
  5。准备就绪后,使用后台查看节点管理,可以看到web主节点30000和任务调度的接口30002已经在运行
  6。使用任务列表菜单,创建定时调度任务,配置基础信息和元数据配置,然后点击保存就开始执行任务
  2。配置程序集调度任务
  1。创建一个类库,安装ScheduleMaster库,创建一个类继承TaskBase,实现抽象方法,然后编译程序集namespaceTaskExcuteService{classAssemblyTask:TaskBase{publicoverridevoidRun(TaskContextcontext){context。WriteLog(程序集任务);}}}
  2。找到debug目录,去掉Base程序集,然后添加为压缩文件
  3。在web界面找到任务配置,选择程序集进行基本配置,配置元数据,输入程序集名称,然后输入类,并将程序集上传,保存就可以运行了3。使用Api接入任务
  为了方便业务系统更好的接入调度系统,ScheduleMaster创建任务不仅可以在控制台中实现,系统也提供了WebAPI供业务系统使用代码接入,这种方式对延时任务来说尤其重要。1。APIServer对接流程在控制台中创建好专用的API对接用户账号。使用对接账号的用户名设置为httpheader中的msauthuser值。使用经过哈希运算过的秘钥设置为httpheader中的msauthsecret值,计算规则:按{用户名}{hash(密码)}{用户名}的格式拼接得到字符串str,然后再对str做一次hash运算即得到最终秘钥,hash函数是小写的32位MD5算法。使用form格式发起http调用,如果非法用户会返回401Unauthorized。HttpClientclientnewHttpClient();client。DefaultRequestHeaders。Add(msauthuser,admin);client。DefaultRequestHeaders。Add(msauthsecret,SecurityHelper。MD5(34;admin{SecurityHelper。MD5(111111)}}admin));
  所有接口采用统一的返回格式,字段如下:
  参数名称
  参数类型
  说明
  Success
  bool
  是否成功
  Status
  int
  结果状态,0请求失败1请求成功2登录失败3参数异常4数据异常
  Message
  string
  返回的消息
  Data
  object
  返回的数据2。创建程序集任务
  使用API创建任务的方式不支持上传程序包,所以在任务需要启动时要确保程序包已通过其他方式上传,否则会启动失败。接口地址:http:yourip:30000apitaskcreate请求类型:POST参数格式:applicationxwwwformurlencoded返回结果:创建成功返回任务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
  否
  参数说明HttpClientclientnewHttpClient();ListKeyValuePairstring,stringargsnewListKeyValuePairstring,string();args。Add(newKeyValuePairstring,string(MetaType,1));args。Add(newKeyValuePairstring,string(RunLoop,true));args。Add(newKeyValuePairstring,string(CronExpression,3308?));args。Add(newKeyValuePairstring,string(Remark,ByXunitTesterCreated));args。Add(newKeyValuePairstring,string(StartDate,DateTime。Today。ToString(yyyyMMddHH:mm:ss)));args。Add(newKeyValuePairstring,string(Title,程序集接口测试任务));args。Add(newKeyValuePairstring,string(AssemblyName,Hos。ScheduleMaster。Demo));args。Add(newKeyValuePairstring,string(ClassName,Hos。ScheduleMaster。Demo。Simple));args。Add(newKeyValuePairstring,string(CustomParamsJson,〔{ParamKey:k1,ParamValue:1111,ParamRemark:r1},{ParamKey:k2,ParamValue:2222,ParamRemark:r2}〕));args。Add(newKeyValuePairstring,string(Keepers,1));args。Add(newKeyValuePairstring,string(Keepers,2));args。Add(newKeyValuePairstring,string(Nexts,));args。Add(newKeyValuePairstring,string(Executors,));HttpContentreqContentnewFormUrlEncodedContent(args);varresponseawaitclient。PostAsync(http:localhost:30000apiTaskCreate,reqContent);varcontentawaitresponse。Content。ReadAsStringAsync();Debug。WriteLine(content);3。创建HTTP任务接口地址:http:yourip:30000apitaskcreate请求类型:POST参数格式:applicationxwwwformurlencoded返回结果:创建成功返回任务id参数列表:
  参数名称
  参数类型
  是否必填
  说明
  MetaType
  int
  是
  任务类型,这里固定是2
  Title
  string
  是
  任务名称
  RunLoop
  bool
  是
  是否按周期执行
  CronExpression
  string
  否
  cron表达式,如果RunLoop为true则必填
  StartDate
  DateTime
  是
  任务开始时间
  EndDate
  DateTime
  否
  任务停止时间,为空表示不限停止时间
  Remark
  string
  否
  任务描述说明
  HttpRequestUrl
  string
  是
  请求地址
  HttpMethod
  string
  是
  请求方式,仅支持GETPOSTPUTDELETE
  HttpContentType
  string
  是
  参数格式,仅支持applicationjson和applicationxwwwformurlencoded
  HttpHeaders
  string
  否
  自定义请求头,ScheduleParam列表的json字符串
  HttpBody
  string
  是
  如果是json格式参数,则是对应参数的json字符串;如果是form格式参数,则是对应ScheduleParam列表的json字符串。
  Keepers
  List
  否
  监护人id
  Nexts
  List
  否
  子级任务id
  Executors
  List
  否
  执行节点名称
  RunNow
  bool
  否
  创建成功是否立即启动HttpClientclientnewHttpClient();ListKeyValuePairstring,stringargsnewListKeyValuePairstring,string();args。Add(newKeyValuePairstring,string(MetaType,2));args。Add(newKeyValuePairstring,string(RunLoop,true));args。Add(newKeyValuePairstring,string(CronExpression,2208?));args。Add(newKeyValuePairstring,string(Remark,ByXunitTesterCreated));args。Add(newKeyValuePairstring,string(StartDate,DateTime。Today。ToString(yyyyMMddHH:mm:ss)));args。Add(newKeyValuePairstring,string(Title,Http接口测试任务));args。Add(newKeyValuePairstring,string(HttpRequestUrl,http:localhost:56655api1。0valuejsonpost));args。Add(newKeyValuePairstring,string(HttpMethod,POST));args。Add(newKeyValuePairstring,string(HttpContentType,applicationjson));args。Add(newKeyValuePairstring,string(HttpHeaders,〔〕));args。Add(newKeyValuePairstring,string(HttpBody,{Posts:〔{PostId:666,Title:tester,Content:testtesttest}〕,BlogId:111,Url:qweqrrttryrtyrtrtrt}));HttpContentreqContentnewFormUrlEncodedContent(args);varresponseawaitclient。PostAsync(http:localhost:30000apiTaskCreate,reqContent);varcontentawaitresponse。Content。ReadAsStringAsync();Debug。WriteLine(content);4。创建延时任务接口地址:http:yourip:30000apidelaytaskcreate请求类型:POST参数格式:applicationxwwwformurlencoded返回结果:创建成功返回任务id参数列表:
  参数名称
  参数类型
  是否必填
  说明
  SourceApp
  string
  是
  来源
  Topic
  string
  是
  主题
  ContentKey
  string
  是
  业务关键字
  DelayTimeSpan
  int
  是
  延迟相对时间
  DelayAbsoluteTime
  DateTime
  是
  延迟绝对时间
  NotifyUrl
  string
  是
  回调地址
  NotifyDataType
  string
  是
  回调参数格式,仅支持applicationjson和applicationxwwwformurlencoded
  NotifyBody
  string
  是
  回调参数,json格式字符串for(inti0;i5;i){intrndNumnewRandom()。Next(20,500);ListKeyValuePairstring,stringargsnewListKeyValuePairstring,string();args。Add(newKeyValuePairstring,string(SourceApp,TestApp));args。Add(newKeyValuePairstring,string(Topic,TestApp。Trade。TimeoutCancel));args。Add(newKeyValuePairstring,string(ContentKey,i。ToString()));args。Add(newKeyValuePairstring,string(DelayTimeSpan,rndNum。ToString()));args。Add(newKeyValuePairstring,string(DelayAbsoluteTime,DateTime。Now。AddSeconds(rndNum)。ToString(yyyyMMddHH:mm:ss)));args。Add(newKeyValuePairstring,string(NotifyUrl,http:localhost:56655api1。0valuedelaypost));args。Add(newKeyValuePairstring,string(NotifyDataType,applicationjson));args。Add(newKeyValuePairstring,string(NotifyBody,{Posts:〔{PostId:666,Title:tester,Content:testtesttest}〕,BlogId:111,Url:qweqrrttryrtyrtrtrt}));HttpContentreqContentnewFormUrlEncodedContent(args);varresponseawaitclient。PostAsync(http:localhost:30000apiDelayTaskCreate,reqContent);varcontentawaitresponse。Content。ReadAsStringAsync();Debug。WriteLine(content);}4。框架简单分析1。全局设计
  根据官网的设计图,以及操作的流程,简单总结一下任务全局流程为客户端masterwork执行任务。从大的架构方向的思想就是,将原有单个服务中业务和任务调度混合的方式做一些改变,使业务和调度分离,专门把任务调度部分剥离出来,作为一个独立的进程,来统一调用和管理任务,而原有服务只做业务处理。
  2。Master和Work分析
  我们主要从主节点,从节点,数据表这几个方面来简单分析,整个业务的时序流程,从本质来看并不复杂master和Work之间的关系是相互配合的,可能乍一看下面整个图有点混乱,下面来解释一下,其实Master节点将任务添加到数据中,然后work节点,去从对应的数据表中取出任务数据,然后根据任务对应的配置,生成配置信息,调用Quartz执行任务,这就是我们整个框架中最核心的业务。
  当然master和work除了主要承载了整个管理系统的UI可视化、后台业务操作、任务执行之外,如果从细节以及实现方式来说主要做了以下事情:
  Master1。分配任务执行和选择节点2。对work节点进行健康检查,对任务进行故障转移
  Work1。取出任务配置信息2。使用Quartz根据配置运行任务3。使用反射调用程序集4。使用httpclient调用http接口
  文章来自https:www。cnblogs。comyuxl01p16311534。html
投诉 评论

为防止玉娆有孕,皇帝一共设下3道保险,成全只是说说而已皇上已经废了姐姐一次,难道还想废第二次吗!?熟悉《甄嬛传》的亲们都知道,在七十多集的剧情中,甄嬛遭遇的最大危机就是被皇后设局滴血认亲那部分。混淆皇家血脉那是何等大罪……郭碧婷社交账号取关向佐,两人疑似发生婚变,独自带娃回港显落寞近日,有网友发现知名女演员郭碧婷在国外的社交账号上取关了自己的老公向佐,而且两人已经很长一段时间没有同框过了,也没有在社交平台上秀恩爱,这才怀疑两人是不是发生了婚变,一时间该消……中杯大杯超大杯,VivoX90三款手机差异点盘点,应该这么选Vivo今年发布的X90系列手机有三款,分别为中杯X90,大杯X90Pro和超大杯X90Pro,那么这三款的差异点在哪里,现有预算该怎么选?从上图可以看到这三款的相同点和……云顶之弈金色传说就是爽,无限装备全员神装,把把必出3星索尔前言:大家好,我是小嗨。今天给大家分享冷门上分的D卡流阵容星界拉克丝阵容组成:弗拉基米尔、斯卡纳、奈德丽、拉克丝、韦鲁斯、塞拉斯、索尔阵容羁绊:8星界龙3法师2格斗……官宣!又伤了!5年报销4次,他也是玻璃人?海沃德,又伤了。来自今天早些时候的一条消息,黄蜂官方宣布,因为左膝盖挫伤,海沃德无缘明天黄蜂对阵凯尔特人的季前赛,这也是黄蜂新赛季的首场比赛。随后黄蜂主教练克利福德……浮亏1550亿后,孙正义决定裁员丨GoingGlobal周报GoingGlobal出海周报是创业邦推出的出海系列栏目,旨在为出海领域的创业者和投资人精选出海大事件、海外大公司、投融资消息,本篇为栏目第147篇报道。整理丨赵晓晓……超光速是可能的?德国科学家提出扭曲引擎,能量超过一颗木星到目前为止,超光速旅行的能力只在科幻电影中出现过,但如果我们真的能够实现这一点,那么我们就可以轻松访问银河系的其他部分,我们可以以前所未有的速度旅行,省去大部分的时间。但是许多……幼儿园毕业照走红,全班同学骑着扫帚飞,花钱换的仪式感有必要吗毕业季的到来对于学生而言具有重大意义,这代表着大家在完成现阶段的学业后,就可以升级或进阶,翻开人生阶段的新篇章。不过,相较于中学生或者大学生的习以为常,毕业对于幼儿园里的……一位80岁老人的醒悟走到生命终点才明白,此生善待一人就赢了图源自网络侵权请联系删除其实,很多人终其一生都在追求错误的东西,他们活了一辈子,也没有活明白。比如他们盲目追求名利,任凭自己内心的欲望不断滋长,以为挣很多钱就是成功……11月新规来了11月将至,一批与生活相关的新规、条例将实施,涉及个体工商户、食品安全、药品安全推动个体工商户实现长远健康发展10月25日,国务院公布《促进个体工商户发……鸡蛋鹅蛋哪个更有营养?之前有个同事怀孕了,她婆婆每餐都会额外给她准备一个鹅蛋来补充营养,我就问她,为什么不吃鸡蛋呢?她告诉我,婆婆说鹅蛋比鸡蛋有营养,并且还可以去胎毒。我:额?。。。。。。鸡蛋……分布式任务调度ScheduleMaster1。什么是ScheduleMasterScheduleMaster是分布式任务调度系统。简称:集中任务调度系统,最简单的理解ScheduleMaster,就是对不同的系统……
奇葩!连续4组32,NBA最激烈半决赛,勇士创耻辱纪录,联盟生涯砍下10次50有多难?历史仅10人做到,老詹领衔现役三人14家中央企业集中签约探索新能源产业发展路径仓央嘉措的梦回之地理塘戒毒戒酒第一股要来了!成立五年尚无营收,善康医药能行吗?新一季的韩式小香风做最好的自己独行侠不敌鹈鹕,勇士惨负太阳,NBA西部最新排名马云背后的大金主,亏到自闭生理角度解释为什么孩子比我们记忆力好情感文案那些适合大学生的平价粉底液推荐儿童铅中毒原因有哪些不要让铅侵袭孩子的身体离婚后不给子女抚养费怎么办?冬季海参来进补吃法讲究有很多夸父追日成语故事夸父追日的故事告诉什么道理无硅油和有硅油的区别无硅油比含硅油洗发水好吗大枣种植红蜘蛛的防治谈谈前面结束的角度做SEO需要考虑什么?6月5日国旗下讲话稿世界上最长的公路隧道通过需要半个小时大学生活我学会了滑雪作文450字北京中考安排

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利