zoukankan      html  css  js  c++  java
  • 宜信开源|微服务任务调度平台SIA-TASK入手实践

    引言

    最近宜信开源微服务任务调度平台SIA-TASK,SIA-TASK属于分布式的任务调度平台,使用起来简单方便,非常容易入手,部署搭建好SIA-TASK任务调度平台之后,编写TASK后配置JOB进行调度,进而实现整个调度流程。本文新建了JOB示例,该JOB关联了前后级联的两个TASK,TASKONE(前置TASK)和TASKTWO(后置TASK),主要阐述一个JOB怎样关联配置两个级联TASK,以及该JOB是如何通过SIA-TASK实现任务调度,最终实现对两个TASK执行器的调用。

    拓展阅读:宜信开源|宜信开源微服务任务调度平台SIA—TASK

    宜信开源|分布式任务调度平台SIA-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的功能点和业务相结合,将其应用至更加复杂的业务场景之下。

    作者:李兴胜

    来源:宜信技术学院

  • 相关阅读:
    LeetCode 275. H-Index II
    LeetCode 274. H-Index
    LeetCode Gray Code
    LeetCode 260. Single Number III
    LeetCode Word Pattern
    LeetCode Nim Game
    LeetCode 128. Longest Consecutive Sequence
    LeetCode 208. Implement Trie (Prefix Tree)
    LeetCode 130. Surrounded Regions
    LeetCode 200. Number of Islands
  • 原文地址:https://www.cnblogs.com/yixinjishu/p/11044737.html
Copyright © 2011-2022 走看看