xxljob分布式调度框架

背景

当前软件的架构已经向分布式架构转变,在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,这时候就需要分布式任务调度框架来运行任务调度

XXL-JOB

xxl-job是大众点评的分布式任务调度平台,开发迅速,学习简单,轻量级,易扩展都是它的特性,开箱即用,

作用:统一管理任务调度平台上的调度任务,负责触发调度执行,并且提供任务管理平台,无需修改代码既可以更改调度时间,耦合降低

特性:高性能,高可用,丰富的任务管理功能,易于监控运维

源码地址如下:

xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。https://gitee.com/xuxueli0323/xxl-job 将源码拉取到idea,查看XXL-JOB的源码,进行简单解析即可上手使用xxljob分布式调度框架_第1张图片

使用场景

1.支付宝固定每个月哪天提醒你还花呗,就是需要用到任务调度

2.一些新闻类资讯app,为了提高加载速度而使用redis存储文章数据,可能会在半夜进行缓存的数据更新,也是需要用到任务调度

安装

配置和部署调度docker安装 

1.创建MySQL容器,初始化xxl-job的SQL脚本

docker run -p 3306:3306 --name mysql57 \
-v /opt/mysql/conf:/etc/mysql \
-v /opt/mysql/logs:/var/log/mysql \
-v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

2.拉取镜像

docker pull xuxueli/xxl-job-admin:2.3.0

3.创建容器

docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.200.130:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 \
--spring.datasource.username=root \
--spring.datasource.password=root" \
-p 8888:8080 -v /tmp:/data/applogs \
--name xxl-job-admin --restart=always  -d xuxueli/xxl-job-admin:2.3.0

启动容器之后访问虚拟机ip:端口/xxl-job-admin即可查看,默认登录账号是“admin/123456” xxljob分布式调度框架_第2张图片

 xxl-job入门案例编写

1.登录调度中心,新建示例任务

xxljob分布式调度框架_第3张图片

 2.创建xxljob-demo项目,导入依赖


    
        org.springframework.boot
        spring-boot-starter-web
    

    
    
        com.xuxueli
        xxl-job-core
        2.3.0
    

3.yml配置文件的配置

server:
  port: ${port:8881} #动态的端口
xxl:
  job:
    admin:
      addresses: http://192.168.200.130:8888/xxl-job-admin #调度中心的访问地址
    executor:
      appname: xxl-job-executor-sample #执行器名称
      port: ${executor.port:9999} #动态的,用于集群情况下配置不同的端口

4.新建配置类,配置类是直接复制源码中的config

package com.afu.xxljob.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * xxl-job config
 *
 * @author xuxueli 2017-04-28
 */
@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.编写任务代码,注意一个重要的注解@XxlJob("JobHandle")

package com.afu.xxljob.job;

import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;

@Component
public class HelloJob {


    @XxlJob("demoJobHandler")//对应调度中心的任务配置的JobHandler
    public void helloJob(){
        System.out.println("简单任务执行了。。。。");

    }
}

6.测试:1.启动xxl-job容器  2.在xxl-job调度中心中启动任务即可完成入门案例

你可能感兴趣的:(分布式,java,运维,定时任务)