宜信开源|微服务任务调度平台SIA-TASK入手实践
引言
最近宜信开源微服务任务调度平台SIA-TASK,SIA-TASK属于分布式的任务调度平台,使用起来简单方便,非常容易入手,部署搭建好SIA-TASK任务调度平台之后,编写TASK后配置JOB进行调度,进而实现整个调度流程。本文新建了JOB示例,该JOB关联了前后级联的两个TASK,TASKONE(前置TASK)和TASKTWO(后置TASK),主要阐述一个JOB怎样关联配置两个级联TASK,以及该JOB是如何通过SIA-TASK实现任务调度,最终实现对两个TASK执行器的调用。
首先,根据部署文档来搭建任务调度平台。
源码地址:https://github.com/siaorg/sia-task
官方文档:https://github.com/siaorg/sia-task/blob/master/README.md
任务调度平台主要由任务编排中心、任务调度中心以及ZK和DB等第三方服务构成,搭建SIA-TASK任务调度平台需要的主要工作包括:
1.MySQL的搭建及根据建表语句建表
2.zookeeper安装
3.SIA-TASK前端项目打包及部署
4.任务编排中心(sia-task-config)部署
5.任务调度中心(sia-task-scheduler)部署
从github上clone代码仓库并下载源码后,可根据SIA-TASK部署指南,搭建SIA-TASK任务调度平台并启动,详见SIA-TASK部署指南
搭建好SIA-TASK任务调度平台后,下一步就是TASK执行器实例的编写啦。
其次,根据开发文档来编写TASK执行器实例并启动。
根据SIA-TASK开发指南,编写了两个TASK示例,TASKONE(前置TASK)和TASKTWO(后置TASK),具体开发规则见SIA-TASK开发指南,TASK示例关键配置即代码在下文有详细展示与介绍。
该示例为springboot项目,并且需要通过POM文件引入SIA-TASK的执行器关键依赖包sia-task-hunter来实现task执行器的自动抓取,首先需要将SIA-TASK源码中的sia-task-hunter包用mvn install命令打包为jar包安装至本地仓库,SIA-TASK源码中的sia-task-hunter包如下图示:
然后就可以进行示例的编写,示例主要包括以下几部分:
配置POM
文件关键依赖
<!-- 此处添加个性化依赖(sia-task-hunter) --> <dependency> <groupId>com.sia</groupId> <artifactId>sia-task-hunter</artifactId> <version>1.0.0</version> </dependency>
配置文件主要配置项
# 项目名称(必须) spring.application.name: onlinetask-demo # 应用端口号(必须) server.port: 10086 # zookeeper地址(必须) zooKeeperHosts: *.*.*.*:2181,*.*.*.*:2181,*.*.*.*:2181 # 是否开启 AOP 切面功能(默认为true) spring.aop.auto: true # 是否开启 @OnlineTask 串行控制(如果使用则必须开启AOP功能)(默认为true)(可选) spring.onlinetask.serial: true
编写TASK执行器主要代码
@Controller public class OpenTestController { @OnlineTask(description = "success,无入参",enableSerial=true) @RequestMapping(value = "/success-noparam", method = { RequestMethod.POST }, produces = "application/json;charset=UTF-8") @CrossOrigin(methods = { RequestMethod.POST }, origins = "*") @ResponseBody public String taskOne() { Map<String, String> info = new HashMap<String, String>(); info.put("result", "success-noparam"); info.put("status", "success"); System.out.println("调用taskOne任务成功"); return JSONHelper.toString(info); } @OnlineTask(description = "success,有入参",enableSerial=true) @RequestMapping(value = "/success-param", method = { RequestMethod.POST }, produces = "application/json;charset=UTF-8") @CrossOrigin(methods = { RequestMethod.POST }, origins = "*") @ResponseBody public String taskTwo(@RequestBody String json) { Map<String, String> info = new HashMap<String, String>(); info.put("result", "success-param"+"入参是:"+json); info.put("status", "success"); System.out.println("调用taskTwo任务成功"); return JSONHelper.toString(info); } }
当编写完TASK执行器实例后,启动该执行器所在进程
启动日志如下图:
日志表明该进程正常启动,并且TASK执行器信息正常上传至ZK当中,
观察TASK管理界面,如图示:
从图中可知,TASK已同步至数据库中。
再次,需要进行JOB的创建和JOB对TASK的关联及配置。
根据使用指南进行如下操作。
创建JOB,配置参数
在JOB管理界面点击添加Job
点击后进入添加Job
界面
选定Job_Group,尽量选定所要关联的TASK所属的Group组名。
分别填写Job类型及其他项,Job类型也可以选择FixRate(特定时间点)类型,本例为CRON类型,具体数值为:0/30 * * * * ?,表示从当前时刻开始,每30秒执行一次
点击添加
,添加JOB成功。
配置TASK
添加JOB成功后,需要为该JOB配置相应的TASK,可配置单个或多个,本例以配置两个级联TASK为例。
点击配置TASK
后,进入Task信息配置
界面。
如上图所示,将需要配置的两个TASK均拉取至右侧,点击编辑
按钮(铅笔形状),进入TASK参数配置
界面。
TASKONE参数配置:
TASKTWO参数配置:
按图中编辑完成后,点击添加
,成功将TASKONE和TASKTWO配置至JOB中。
添加完毕后,可进行两个TASK的依赖关系配置,如下图所示:
用箭头将TASKONE(前置TASK)指向TASKTWO(后置TASK),即可完成TASK之间的依赖关系设置,点击提交,完成整个JOB的配置,配置完成后,可点击TASK信息
按钮,查看TASK配置信息详情
,观察该JOB的TASK配置情况。
TASK配置信息图
TASK配置信息详情
最后,激活JOB并观察相应日志。
TASK配置成功后,点击状态操作
下拉按钮中激活
按钮,激活JOB。
激活JOB后,刷新该界面,可发现该JOB列表调度器(红框处)出现调度器IP及端口号,表示该JOB激活后被该调度器抢占。
先观察管理界面JOB及TASK日志
成功激活JOB后,进入调度日志界面,等待至JOB执行时间后,可查看到该JOB执行日志,如下图示。
标号1:代表该JOB日志。
标号2:代表该JOB所关联的前置TASK(TASKONE)日志。
标号3:代表该JOB所关联的后置TASK(TASKTWO)日志。
标号4:endTask为系统追加的一个虚拟TASK,仅表示该JOB的一次调度过程完成。
同时从执行时间也可观察出,每30秒调度一次。
再观察执行器TASK实例日志
还可观察执行器实例TASK日志,验证是否调用成功。
从日志可知,确实调用成功,并且每30秒调用一次。
停止JOB
当需要停止JOB时,点击状态操作
下拉按钮中停止
按钮,停止JOB。
本文仅是对微服务任务调度平台SIA-TASK的初步实践使用,通过以上描述,可实现SIA-TASK对执行器实例TASK实现任务调度的功能,本文中搭建的示例非常简单,适合快速入手SIA-TASK,当然,SIA-TASK还有更加强大的任务调度功能,可以应对更加复杂的业务场景,大家可以继续深度使用体验,将SIA-TASK的功能点和业务相结合,将其应用至更加复杂的业务场景之下。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
再一次生产 CPU 高负载排查实践
前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨。 其实早在去年我也处理过类似的问题,并记录下来:《一次生产 CPU 100% 排查优化实践》 不过本次问题产生的原因却和上次不太一样,大家可以接着往下看。 问题分析 收到邮件后我马上登陆那台服务器,看了下案发现场还在(负载依然很高)。 于是我便利用这类问题的排查套路定位一遍。 首先利用 top -c 将系统资源使用情况实时显示出来 (-c 参数可以完整显示命令)。 接着输入大写 P 将应用按照 CPU 使用率排序,第一个就是使用率最高的程序。 果不其然就是我们的一个 Java 应用。 这个应用简单来说就是定时跑一些报表使的,每天凌晨会触发任务调度,正常情况下几个小时就会运行完毕。 常规操作第二步自然是得知道这个应用中最耗 CPU 的线程到底再干嘛。 利用 top -Hp pid 然后输入 P 依然可以按照 CPU 使用率将线程排序。 这时我们只需要记住线程的 ID 将其转换为 16 进制存储起来,通过 jstack pid >pid.log 生成日志文件,利...
- 下一篇
如何更好的利用区块链API
区块链允许数据提供者和消费者直接在单个开放系统中交易信息,而不是订阅世界各地的数十个集中服务,并编写他们的软件来与每个API进行通信。阅读此区块链API教程,了解如何根据你的特定需求使用它。 API(应用程序编程接口)是单个计算机程序可以用来与另一个程序交互的方法(类,过程,函数,结构或常量)的描述。它通常包含在任何Internet协议(例如RFC)的描述中,软件框架或对操作系统函数的标准调用。它通常由单独的软件库或操作系统服务实现。开发人员通常使用区块链API来编写各种应用程序。 API定义程序(模块,库)提供的功能,并允许从该功能的实现方式中抽象出来。软件组件通过API相互交互。在这种情况下,组件通常形成层次结构:高级组件使用低级组件的API,而这些组件又使用甚至更低级别组件的API。通过因特网进行数据传输的协议是根据该原理构建的。 标准协议栈(OSI网络模型)包含7层(从物理位传输层到应用协议层,类似于HTTP和IMAP协议)。每个级别使用先前底层数据传输级别的功能,并为下一个覆盖级别提供必要的功能。 注意:协议的概念与API的概念意义相近。两者都是功能的抽象,除了协议涉及数据传...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Red5直播服务器,属于Java语言的直播服务器
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程