五分钟体验分布式调度框架xxl-job
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
本教程主要介绍怎么在spring boot工程中快速使用xxl-job。详细的xxl-job的使用文档请参考:https://www.xuxueli.com/xxl-job/
简介
在xxl-job中,有2个角色:
- 一个是调度任务管理系统,xll-job-admin
- 另一个是xxl-job-excutor,通常是我们业务系统,比如本案例的springboot业务系统。
整个调度任务执行流程如下:
- Xxl-job-admin官方代码已经写好,不做定制化开发的话,直接启动即可正常运行。启动Xxl-job-admin工程。
- xxl-job-excuotr需要配置xxl-job-admin的地址,主动向Xxl-job-admin注册,并建立netty连接。在xxl-job-excutor中需要实现excutor的业务代码。
xxl-job-admin
Xxl-job-admin是调度任务的管理中心。所有的excutor都会向xxl-job-admin注册,注册完成之后可以对excutor进行任务分发。
在官网中下载最新的release代码,比如本文中的v2.2.0版本,下载地址为https://github.com/xuxueli/xxl-job/releases。
Xxl-job-admin需要Mysql数据库,请提前准备安装好。然后在数据库中导入代码工程中的doc/sql目录下的s ql文件。
然后修改xxl-job-admin工程中的resources中的application.properties的数据库配置,如下:
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=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
修改之后,启动XxlJobAdminApplication的main函数,xxl-job-admin启动成功。
在浏览器上访问http://localhost:8081/xxl-job-admin/ ,登陆用户名为admin,密码为123456。登陆成功后,显示的界面如下:
xxl-job-excutor
xxl-job-excutor是任务的执行单元,需要在业务系统中去实现。本案例中是一个springboot的工程,此工程需要集成xxl-job作为任务执行单元。在工程的pom.xml文件中引入xxl-job-core的依赖如下:
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.2.0</version>
</dependency>
在工程的application.properties中配置xxl.job.admin.addresses的地址,配置含义见注释,具体配置如下:
# web port
server.port=8082
# no web
#spring.main.web-environment=false
# log config
logging.config=classpath:logback.xml
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8081/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=
### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job executor log-path
xxl.job.executor.logpath=../applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
需要初始化一个XxlJobSpringExecutor,该类用于处理xxl-job-admin和xxl-job-excutor之间的通讯以及任务的处理。
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@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
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
注册一个任务,任务名为demoJobHandler。
@Component
public class SampleXxlJob {
private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
/**
* 1、简单任务示例(Bean模式)
*/
@XxlJob("demoJobHandler")
public ReturnT<String> demoJobHandler(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
logger.info("XXL-JOB, Hello World. params:"+param);
for (int i = 0; i < 5; i++) {
XxlJobLogger.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
return ReturnT.SUCCESS;
}
}
在xxl-job-admin中可以看到demoJobHandler的配置,在控制台启动任务。
启动任务后,可以看到执行任务的日志。同时在xxl-job-excutor中可以看到任务执行的业务日志。
源码下载
https://github.com/forezp/distributed-lab/tree/master/xxl-job
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击