分布式任务调度中心 XXL-Job

分布式任务调度中心 XXL-Job

  • XXL Job , github

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

    • 安装调度中心,调度中心的 Server 端

      • 执行SQL脚本,创建并初始化数据库, 脚本位于源码的 /xxl-job/doc/db/tables_xxl_job.sql

      • 使用IDEA 打开 xxl-job项目,做以下修改后,既可以运行项目

        • 打开application.properties 文件,修改端口号 为:7080;修改MySQL连接字符串
        • 打开logback.xml 文件,修改 log.path 为: /mnt/logs/xxl-job-admin.log
        • JDK 选择 1.8
      • 访问 admin 界面

        • URL : http://localhost:7080/xxl-job-admin/toLogin
        • 用户名和密码: admin/123456
      • 使用 nacos 配置中心,将 application.properties 文件中的配置放到配置中心

        • 添加 pom 依赖
        • 在 nacos 管理后台添加配置文件
        • 在 项目启动类上添加 nacos 注解
      • 打包并部署:

        • 执行命令:mvn clean install -Dmaven.test.skip=true
        • 后台运行:nohup java -jar xxl-job-admin.jar &
      • 高可用部署

        • DB配置保持一致;
        • 集群机器时钟保持一致
      • 通过Docker 部署

        docker pull xuxueli/xxl-job-admin
        
        docker run -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin
        
        # 修改mysql连接字符串
        docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin
        
    • Client端:集成调度中心 , 参考:源码中sample项目

      • 添加 pom 依赖

        <dependency>
            <groupId>com.xuxueligroupId>
            <artifactId>xxl-job-coreartifactId>
            <version>2.1.2version>
        dependency>
        
      • 在application.properties文件中添加调度中心相关配置

        ### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
        xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
        ### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
        xxl.job.executor.appname=xxl-job-executor-sample
        ### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
        xxl.job.executor.ip=
        ### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
        xxl.job.executor.port=9999
        ### 执行器通讯TOKEN [选填]:非空时启用;
        xxl.job.accessToken=
        ### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
        xxl.job.executor.logpath=
        ### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
        xxl.job.executor.logretentiondays=30
        
      • 添加配置文件 XxlJobConfig

        @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.ip}")
            private String ip;
        
            @Value("${xxl.job.executor.port}")
            private int port;
        
            @Value("${xxl.job.accessToken}")
            private String accessToken;
        
            @Value("${xxl.job.executor.logpath}")
            private String logPath;
        
            @Value("${xxl.job.executor.logretentiondays}")
            private int logRetentionDays;
        
            @Bean
            public XxlJobSpringExecutor xxlJobExecutor() {
                logger.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;
            }
        }
        
      • 创建Bean模式的任务 , Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法

        // 在Spring Bean实例中,开发Job方法,方式格式要求如下
        // 为Job方法添加注解 @XxlJob,注解value值对应的是调度中心新建任务的JobHandler属性的值。
        // 执行日志:需要通过 "XxlJobLogger.log" 打印执行日志
        @XxlJob("demoJobHandler")
        public ReturnT<String> execute(String param) {
            XxlJobLogger.log("hello world.");
            return new ReturnT<String>(ReturnT.SUCCESS_CODE, "自定义消息");
            return ReturnT.SUCCESS;
        }
        
    • 其他模式的任务

      • GLUE模式(Java): 任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。
      • GLUE模式(Shell) : 该模式的任务实际上是一段 “shell” 脚本
      • GLUE模式(Python) : 该模式的任务实际上是一段 “python” 脚本;
      • GLUE模式(NodeJS) : 该模式的任务实际上是一段 “nodeJS” 脚本;
      • GLUE模式(PHP)
      • GLUE模式(PowerShell)
    • 任务配置指南

      • Client 端准备好后,还需要登录 xxl-job-admin 后台进行配置
      • 打开执行器管理 > 新增执行器,其中 AppName 要和Client端的配置一样、注册方式选择自动注册
      • 打开任务管理 > 新增, 其中,运行模式选择BEAN,JobHandler要和Client端 @XxlJob 注解中的一样
      • 在开发环境测试好后,可以导出DB中的 xxl_job_info表中的数据,不需要在生产环境重新创建数据
    • 总体设计

      • TODO

你可能感兴趣的:(第三方)