当前位置 博文首页 > RemainderTime:框架整合(一)- 分布式调度框架xxl-job的简单使

    RemainderTime:框架整合(一)- 分布式调度框架xxl-job的简单使

    作者:[db:作者] 时间:2021-07-12 21:43

    xxl-job是一款分布式调度框架,可以配置时间来定时启动项目,一般使用于项目服务多但执行时间较短,想快速启动等应用场景。

    安装调度中心xxl-job-admin
    • 这里使用的是window10上的docker进行安装

    • 注意:安装xxl-job之前需要先在docker上安装mysql

    • 安装步骤可参考另一篇博文(第4、5点):记录(三)Docker安装镜像操作相关命令.

    • docker安装成功,先启动mysql再启动xxl-job-admin
      在这里插入图片描述

    • 根据配置的ip和端口访问本地路径:http://localhost:8089/xxl-job-admin/

    • 默认账户密码: admin , 123456
      在这里插入图片描述

    整合springboot项目
    • 创建一个springboot项目(或者使用正在开发中的springboot项目或微服务项目都可)
    • application.yml加入xxl-job相关配置(可查看官方文档)
    xxl:
      job:
        admin:
          addresses: http://127.0.0.1:8089/xxl-job-admin  #本地调度中心地址
        executor:
          appname: xxl-job-executor-sample #执行器地址
          ### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
          logpath: D:/xxl-job
         # port: 10000  # 注:使用路由策略为分片模式时不要配置端口
    
    • 创建xxl-job执行器组件类XxlJobConfig.java
    **
     * @program: rabbitmq-demo
     * @description: xxl-job执行器
     * @author: xf
     * @create: 2021-05-30 16:47
     **/
    @Component
    @Slf4j
    public class XxlJobConfig {
    
        @Value("${xxl.job.admin.addresses}")
        private String adminAddresses;
    
        @Value("${xxl.job.executor.appname}")
        private String appname;
    
        @Value("${xxl.job.executor.logpath}")
        private String logPath;
        
    //    @Value("${xxl.job.executor.port}")
    //    private Integer port;
    
        @Bean
        public XxlJobSpringExecutor xxlJobExecutor() {
            log.info(">>>>>>>>>>> xxl-job config init.");
            XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
            xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
            xxlJobSpringExecutor.setAppname(appname);
    //        xxlJobSpringExecutor.setIp(ip);
    //        xxlJobSpringExecutor.setPort(port);
    //        xxlJobSpringExecutor.setAccessToken(accessToken);
            xxlJobSpringExecutor.setLogPath(logPath);
    //        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
            return xxlJobSpringExecutor;
        }
    }
    
    • 在调度中心管理界面上新增一个调度任务

    在这里插入图片描述
    2.
    在这里插入图片描述
    3.
    在这里插入图片描述

    注:路由策略阻塞处理策略 着重使用

    • 创建一个组件使启动器和执行器关联起来
    • 路由策略:使用分片模式,可大大较少执行时间
    /**
     * @program: rabbitmq-demo
     * @description: BEAN模式开发
     * @author: xf
     * @create: 2021-05-30 17:08
     **/
    @Component
    @Slf4j
    public class MyxxLJobHandler {
    
        @XxlJob("myxxLjobHandler")
        public ReturnT<String> demoJobHandler() throws Exception {
            XxlJobHelper.log("XXL-JOB, Hello World.");
    
            //路由策略:使用分片模式,耗时减半
            int shardIndex = XxlJobHelper.getShardIndex();//第几个执行器
            int shardTotal = XxlJobHelper.getShardTotal();//总共多少个执行器
            List<Integer> list = Arrays.asList(1,2,3,4);
            list.forEach(x->{
                //进行取模过滤不同的数据
                if(x%shardTotal==shardIndex){
                    log.info("执行第"+x+"条数据------");
                }
            });
    
            return ReturnT.SUCCESS;
        }
    }
    
    • 项目中再创建一个相同的启动器并启动(需修改端口)(分片模式使用)
    • 在这里插入图片描述
      在这里插入图片描述
    • 查看调度中心执行器管理,注册成功2个执行器
      在这里插入图片描述

    注:使用分片模式时,配置文件中不要自己配置端口,不然启动第二个执行器时,会报端口冲突的异常。不配做xxl-job会自动分配端口号

    • 修改路由策略为分片模式
      在这里插入图片描述

    • 执行一次任务
      在这里插入图片描述

    • 查看控制台
      在这里插入图片描述
      在这里插入图片描述

    • 完成,奥利给。


    注:阻塞处理策略:一般选择丢弃后续调度(具体使用效果步骤略),自己记住就好啦


    cs