一、概述
在分布式任务调度-XXL-JOB(一)中介绍了其基本使用,本文章中介绍如何集成到微服务工程中。
二、XXL-JOB-ADMIN容器化
为了不要每次都打开IDE运行XXL-JOB-ADMIN,我把它制作成进行,运行在我的Desktop环境中。主要命令如下:
# 制作镜像
docker build . -t xxl-job-admin:2.4.0
# 运行镜像
docker run --name xxl-job-admin -p 8080:8080 -d xxl-job-admin:2.4.0
成功运行镜像后,访问如下地址:
http://localhost:8080/xxl-job-admin 默认用户名和密码为admin/123456
这中间也出现了一个小插曲,由于我的MySql也是用Docker部署的,在桌面环境是可以通过127.0.0.1进行访问,但是容器化后的应用,使用127.0.0.1无法访问,通过查询一些资料,发现可以通过进行MySql的镜像,通过如下命令查询到对应IP。将应用程序修改MySql的IP后重新打包启动,成功。
cat /etc/hosts
三、微服务集成
3.1 增加job工程
工程结构如下图:
pom.xml的依赖配置主要如下,重点是增加了xxl-job-core依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- xxl-job-core -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
配置文件涉及XXL-JOB的配置:
xxl:
job:
admin:
addresses: http://127.0.0.1:8080/xxl-job-admin
accessToken: default_token
executor:
appname: job-demo
address:
ip:
port: 9999
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: 30
本次测试的Job定义如下,调用了微服务的nacosJobHello方法,仅仅在Nacos微服务中打印了日志:
@Component
public class NacosXxlJob {
@Autowired
private RestTemplate restTemplate;
@XxlJob("nacosJobHandler")
public void nacosJobHandler() throws Exception {
restTemplate.getForObject("http://nacos-demo/nacosJobHello", void.class);
}
}
观察结果,成功:
四、总结
- docker容器化XXL-JOB-ADMIN的过程中,对于docker的网络相关功能不太熟悉,后续可以再学习学习。
- 学习了官方的案例后,集成到工程算比较简单了,基本一步到位,没有遇到问题。
- 我的demo中将job的appname修改为job-demo,在控制台中需要修改为一样的名称,否则无法正确调用。