xxl-Job分布式任务调度

一、分布式任务调度产品了解:

xxl-Job分布式任务调度_第1张图片

1) TBSchedule:淘宝推出的一款非常优秀的高性能分布式调度框架,目前被应用于阿里、京东、支付宝、国美等很多互联网企业的流程调度系统中。但是已经多年未更新,文档缺失严重,缺少维护。

2) XXL-Job:大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

3)Elastic-job:当当网借鉴TBSchedule并基于quartz 二次开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,具有任务高可用以及分片功能。

4)Saturn: 唯品会开源的一个分布式任务调度平台,基于Elastic-job,可以全域统一配置,统一监 控,具有任务高可用以及分片功能。 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

源码地址:https://gitee.com/xuxueli0323/xxl-job 文档地址:https://www.xuxueli.com/xxl-job/

二、初始化“调度数据库”

数据库sql脚本:下载项目源码并解压;

脚本所在位置/xxl-job/doc/db/tables_xxl_job.sql

若为集群部署,集群情况下各节点务必连接同一个mysql实例

若mysql做主从,调度中心集群节点务必强制走主库

- xxl_job_lock:任务调度锁表;
- xxl_job_group:执行器信息表,维护任务执行器信息;
- xxl_job_info:调度扩展信息表: 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
- xxl_job_log:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
- xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
- xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
- xxl_job_user:系统用户表;

三、配置部署"调度中心"项目

启动方式:

  1. 虚拟机启动
cd /opt/hmtt/db
./close.sh
./start.sh
  1. 源码启动

调度中心项目xxl-job-admin

  配置文件地址:/xxl-job/xxl-job-admin/src/main/resources/application.properties

  数据库连接信息:

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://192.168.85.143:3306/xxl_job?Unicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

启动项目:XxlJobAdminApplication

访问调度中心:http://localhost:8080/xxl-job-admin

默认登录账号密码admin 123456

四、项目集成xxl-job

微服务端:

1.pom.xml配置文件

 
    
        com.xuxueli
        xxl-job-core
        2.2.0
    

2.application.yml配置文件

xxl:
  job:
    admin:
      addresses: http://192.168.85.143:8080/xxl-job-admin
    executor:
      appname: ${spring.application.name}-executor
      port: 9991

3.引导类开启定时任务

@EnableScheduling  //开启定时任务
@SpringBootApplication
public class ArticleApp {
    public static void main(String[] args) {
        SpringApplication.run(ArticleApp.class, args);
    }
}

4.添加xxl-job配置类

@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.port}")
    private int port;
    
    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setPort(port);

        return xxlJobSpringExecutor;
    }
}

5.创建task任务类

  注意:注解保持一致,返回结果是ReturnT,携带参数是String param

@Service
@Slf4j
public class HotArticleTask {

    @Autowired
    private IApArticleService articleService;

    @XxlJob("computeHotArticleJob") //一定要与调度中心新建任务的JobHandler的值保持一致
    public ReturnT computeHotArticleJob(String param) throws Exception {
        log.info("开始执行每日文章分值计算任务...");

        try {
            articleService.compute();
        } catch (Exception e) {
            e.printStackTrace();
            return ReturnT.FAIL;
        }
        return ReturnT.SUCCESS;
    }
}

6.启动项目测试

任务调度中心:

  1.配置执行器

xxl-Job分布式任务调度_第2张图片

         2.新增任务管理

xxl-Job分布式任务调度_第3张图片

        3.启动执行

五、总结

注意事项:

  1.定时执行失败,时间不一致(虚拟机时间与本机时间对不上)重启虚拟机或者更新时间

xxl-Job分布式任务调度_第4张图片

你可能感兴趣的:(分布式,分布式)