自学内容网 自学内容网

xxl-job使用总结

xxl-job从入门到入土

xxl-job介绍

xxl-job是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。xxl-job支持调度中心集群和执行器集群。

xxl-job开源项目

xxl-job使用

xxl-job整合SpringBoot

  1. 引入xxl-job的依赖
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.4.0</version>
        </dependency>
  1. xxl-job执行器配置
@Configuration
@Slf4j
public class XxlJobConfig {
    @Value("${xxl.job.admin.address}")
    private String adminAddresses;
    @Value("${xxl.job.accessToken}")
    private String accessToken;
    @Value("${xxl.job.executor.appname}")
    private String appname;
    @Value("${xxl.job.executor.address}")
    private String address;
    @Value("${xxl.job.executor.ip}")
    private String ip;
    @Value("${xxl.job.executor.port}")
    private int port;
    @Value("${xxl.job.executor.logpath}")
    private String logPath;
    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;

    /**
     * 执行器
     */
    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        XxlJobSpringExecutor executor = new XxlJobSpringExecutor();
        //调度中心地址
        executor.setAdminAddresses(adminAddresses);
        //执行器名称
        executor.setAppname(appname);
        //执行器地址
        executor.setAddress(address);
        //执行器ip
        executor.setIp(ip);
        //执行器端口,如果集单机群部署,则执行器的端口需要不一样
        executor.setPort(port);
        //需要和调度中心配置文件中的配置一致
        executor.setAccessToken(accessToken);
        //执行器日志存储路径
        executor.setLogPath(logPath);
        //执行器日志文件保存天数,过期日志自动清理, 大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
        executor.setLogRetentionDays(logRetentionDays);

        return executor;
    }

}
  1. application.yml文件
xxl:
  job:
    accessToken: default_token  #与xxl-job-admin配置一致
    admin:
      address: http://localhost:8080/xxl-job-admin  #xxl-job-admin地址
    executor:  #执行器配置,执行器就是被调度中心调度的任务
      appname: xxl-job-executor-test
      address: http://127.0.0.1:9986
      ip: 127.0.0.1
      port: 9986
      logpath: /data/applogs/xxl-job/jobhandler  #日志路径
      logretentiondays: -1  #执行器日志文件保存天数 [选填] : 过期日志自动清理, 大于等于3时生效; 否则, 如-1, 关闭自动清理功能

spring:
  application:
    name: xxl-job-executor
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
server:
  port: 9987  #应用的port和执行器的port需要不一致,不然启动会报错

到这里为止,执行器的配置就完成了,但是项目不能正常启动,因为需要调度中心。

  1. 下载xxl-job项目,启动调度中心应用,在调度中心中创建执行器,执行器的AppName需要和执行器的配置文件中的appname保持一致,注册方式选择自动注册后,如果执行器能注册到调度中心,则会自动获取到执行器的地址,如果没有获取到地址后面执行会报错
    在这里插入图片描述
  2. 启动执行器,看执行器的机器地址是否为空就能知道执行器有没有成功注册了

定时任务

注册定时任务有两种方式,一种是继承IJobHanlder类,还有一种是使用@xxlJob注解

继承IJobHanlder

继承IJobHanlder类后,需要使用执行器的registerHandler方法注册到执行器中,不然会执行任务会报错。

@Component("testJobHandler")
public class TestJobHandler extends IJobHandler {

    private Logger logger = LoggerFactory.getLogger(TestJobHandler.class);


    @Override
    public void execute() throws Exception {
        logger.info("TestJobHandler execute ......");
    }

}

使用执行器注册该任务

executor.registJobHandler("testJobHandler", new TestJobHandler());

不推荐使用这种方式注册任务。

@xxlJob

使用注解的缺点是需要在调度中心后台手动配置任务

    /**
     * 这里需要返回一个结果,否则任务调度中心上调度日志的执行结果显示成功,但是调度结果显示失败
     */
    @XxlJob("testJob1")
    public ReturnT<String> executeJob() {
        logger.info("testJob1 executor: " + serverPort);
        return ReturnT.SUCCESS;
    }

在调度中心配置对应任务,JobHandler需要和注解中的"testJob1"保持一致
在这里插入图片描述

对于需要手动注册定时任务的问题,网上有相应的解决方案
魔改xxl-job,彻底告别手动配置任务!

调度中心介绍

调度中心有6个大功能,需要重点关注的是任务管理和执行器管理。
在这里插入图片描述

执行器管理

执行器管理的配置不多,比较简单,上文中已经介绍了,这里就不多说了。
在这里插入图片描述

任务管理

一个任务有下图所示的配置。
在这里插入图片描述

  1. 基础配置
  2. 报警邮件:
  3. 调度配置:设置任务的执行周期,执行一次还是周期性执行
任务配置
  1. 运行模式
    • Bean:上文提到的两种定时任务的运行模式都是Bean
    • GLUE:将定时任务的执行逻辑以代码的形式直接嵌入到执行器中。这种方式适用于需要频繁更新任务逻辑的场景
GLUE模式

创建一个GLUE模式的任务,可以看到此时JobHandler是只读的。
在这里插入图片描述
在列表上选择GLUE模式的任务,操作红会有一个GLUE IDE,点击这个按钮
在这里插入图片描述
输入需要执行的逻辑即可,建议在IDE中写好,直接复制过去。在GLUE任务的代码里面也是可以@Autowired等注解的,写好后保存即可。
在这里插入图片描述

高级配置
  1. 路由模式:将一个任务分发到多个执行器上执行的方式
    • 广播模式:所有执行器都会接收到任务并执行
    • 分片模式:将任务分片,每个执行器执行其中的一部分
    • 固定模式:指定某个执行器执行任务
    • 轮询模式:按照轮询的模式选择执行
  2. 调度过期策略:当任务执行超过预定时间后如何处理
    • 忽略:当调度中心错过调度时间时,忽略此次调度,不再进行补偿处理
    • 立即执行一次:当调度中心错过调度时间时,立即进行一次补偿触发,以确保任务能够被执行
  3. 阻塞处理策略
    • 单机串行:默认的阻塞处理策略,当任务队列中的任务数量达到上限时,新的任务请求会在当前执行器中串行执行
    • 弃后续调度:当任务队列中的任务数量达到上限时,新的任务请求会被直接丢弃
    • 覆盖之前调度:当任务队列中的任务数量达到上限时,新的任务请求会覆盖之前的任务请求

集群

调度中心集群

XXL-JOB调度中心集群部署配置

执行器集群

xxl-job执行器集群部署及路由策略实践

微服务架构下执行器的整合

主要是两种思路:

  1. 将执行器整合到业务的服务实例中,比如将执行器和任务都放在库存服务中
  2. 单独抽出一个执行器服务,通过Feign调用其它业务服务

参考


原文地址:https://blog.csdn.net/wsb_2526/article/details/142434913

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!