前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XXL-Job框架入门介绍

XXL-Job框架入门介绍

作者头像
编程随笔
发布2022-04-29 12:25:34
1.1K0
发布2022-04-29 12:25:34
举报
文章被收录于专栏:后端开发随笔

框架概述

框架主页: https://www.xuxueli.com/xxl-job/

包含组件: 1.调度中心 2.任务执行器

特点: 1.调度中心,任务执行器独立部署,互不影响。 2.调度中心和任务执行器都支持集群化部署,避免出现单点故障。 3.调用中心和执行器之间通过HTTP协议进行通信,因此需要把它们部署在能相互连通的网络环境。

安装部署

基于v2.3.0版本进行说明。

调度中心

调度中心是与业务无关的,直接从源码编译部署即可。

这里下载最新的项目源码压缩包,解压到本地。

第一步:初始化调度中心数据库

代码语言:javascript
复制
SQL语句文件位于项目源码目录中,路径:项目源码目录\doc\db\tables_xxl_job.sql
初始化数据库及表的操作比较简单,具体实现省略。

第二步:编译调度中心运行包

(1)进入到解压后的项目源码目录,打开配置文件项目源码目录\xxl-job-admin\src\main\resources\application.properties。 (2)修改配置参数:在此之前需要通过【第一步】完成调度中心数据库的创建和登录授权的设置。

  • 修改数据库连接参数
代码语言:javascript
复制
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root      # 数据库用户名
spring.datasource.password=root_pwd  # 数据库用户密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  • 修改报警邮件配置信息
代码语言:javascript
复制
### xxl-job, email
spring.mail.host=smtp.qq.com         # 邮件服务器主机
spring.mail.port=25                  # 邮件服务器端口 
spring.mail.username=xxx@qq.com      # 邮件账户
spring.mail.from=xxx@qq.com          # 发送邮件账号,通常跟spring.mail.username值一致
spring.mail.password=xxx             # 发送邮件账户密码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

(3)编译调度中心运行包

进入到项目源码目录,执行:mvn clean package,将会在“项目源码目录\xxl-job-admin\target”路径下生成调度中心运行jar包:xxl-job-admin-${version}.jar

第三步:运行调度中心

将jar包拷贝到服务器,执行:java -jar xxl-job-admin-${version}.jar即可运行并启动调度中心进程。

如果是在IDE中进行调试,可以在修改配置参数之后直接运行即可。

调度中心启动成功之后,访问:http://服务器主机地址:8080/xxl-job-admin 打开调度中心管理界面。 默认用户名/密码:admin/123456

调度中心管理界面
调度中心管理界面

任务执行器

任务执行器是跟具体业务绑定的程序逻辑,需要单独开发。 xxl-job框架支持2种开发任务执行器的方式: 1.GLUE模式:在xxl-job管理后台动态编辑任务执行代码并执行。 2.BEAN模式:这应该是使用得最多的方式,使用这种方式运行的执行器是一个需要独立部署的程序。

GLUE模式任务执行器

略。

BEAN模式任务执行器

在官方给出的示例中,推荐使用基于Spring Boot框架开发任务执行器,详细开发步骤如下:

1.新建基于Spring Boot框架的Maven项目(如果是在已经存在的Spring Boot项目中添加xxl-job任务执行器,这一步忽略)。

2.添加xxl-job核心依赖

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

3.配置执行器运行参数 配置文件:src\main\resources\application.properties 需要配置的核心参数是2个: (1)xxl.job.admin.addresses:调度中心地址 (2)xxl.job.executor.appname:任务执行器名称,这个参数用于在调度中心注册执行器

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

4.配置执行器组件

代码语言:javascript
复制
@Configuration
@Slf4j
public class JobExecutorConfig {
    @Value("${xxl.job.admin.addresses}")
    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注入到Spring容器中
    @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;
    }
}

5.编写任务执行器方法

代码语言:javascript
复制
// 任务执行器类本身也需要注入到Spring容器中
@Component
public class SimpleJobHandler {
    // 使用xxl-job-core提供的注解@XxlJob 标注这是一个执行器方法
    @XxlJob("simpleHandler")
    public void simpleHandler() throws InterruptedException {
        XxlJobHelper.log("XXL-JOB, Hello World.");

        for (int i = 0; i < 5; i++) {
            XxlJobHelper.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }
        // default success
    }
}

6.启动任务执行器

将任务执行器项目打包,部署到服务器启动。

如果在IDE中开发调试,直接启动即可。

至此,调度中心还不知道该任务执行器的存在,所以在调度中心创建定时任务时无法选择该执行器,需要在调度中心手动添加该执行器。 回调调度中心管理界面,在左侧菜单栏选择【执行器管理】,单击【新增】,在弹出框中输入新创建的执行器信息:

  • AppName:在执行器项目配置文件中设置的属性xxl.job.executor.appname值,如:xxl-job-executor-test
  • 名称:在执行器方法中使用注解@XxlJob指定的字符串名称,如:simpleHandler
  • 注册方式:自动注册

点击【保存】按钮。

任务执行器添加成功
任务执行器添加成功

此时,就可以在调度中心的【执行器管理】界面中看到刚刚添加的任务执行器了。

通过上述步骤完成任务执行器在调度中心的注册操作之后,就可以在调度中心添加定时任务时选择对应的任务执行器了。

添加定时任务时选择注册成功的执行器
添加定时任务时选择注册成功的执行器

依赖的底层框架及核心技术

1.netty:提供http服务 https://github.com/netty/netty

2.Hessian http://hessian.caucho.com

3.自研任务调度器

其他任务调度系统

https://github.com/PowerJob/PowerJob PowerJob

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 框架概述
  • 安装部署
    • 调度中心
      • 任务执行器
        • GLUE模式任务执行器
        • BEAN模式任务执行器
    • 依赖的底层框架及核心技术
    • 其他任务调度系统
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档