学习记录文档,若有不足多谢指出。
xxl-job
xxl-job是一个优秀的分布式任务调度系统。
文章目录
一、构建
1.下载
前往 https://github.com/xuxueli/xxl-job/releases 下载源码导入到你的开发环境解决所需依赖jar包。
我这里使用的idea。
2.搭建调度数据库
由于我的系统是macos没有docker的虚拟网卡为了方便服务和数据库之间的互相访问所以我将mysql搭建到docker容器上。
创建docker bridge网络
docker network create --subnet=172.30.0.0/24 net_xljob
创建docker数据卷
docker volume create mysql-xljob-volume
创建mysql容器加入net_xljob网络栈且指定容器在网络栈中的别名
docker run -itd --name=mysql_xljob \
--network net_xljob \
--network-alias na_mysql_xljob \
-p 3306:3306/tcp \
-v mysql-xljob-volume:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7.29 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
使用你熟悉的可视化工具连接到刚刚创建的数据库,且执行doc/db/tables_xxl_job.sql 文件。
此时你可以尝试编译并运行模块xxl-job-admin(调度中心),xxl-job-executor-sample-springboot(执行器)。
二、部署
1.部署调度中心
修改项目配置文件
修改 xxl-job-admin 数据源url将host改为mysql在bridge中的别名(为什么使用别名?因为每次部署容器内部地址可能会发生变化,来回修改会很麻烦)
spring.datasource.url=jdbc:mysql://na_mysql_xljob:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
配置docker 与run targets
依次选择:IDEA > Preferences > Build,Execution,Deployment > Docker
依次选择:IDEA > Preferences > Build,Execution,Deployment > Run Targets > Add Target On > Docker
这里详细讲一下Run options参数
--rm --network net_xljob --ip 172.30.0.10 -p 8080:8080/tcp
–rm
每次运行结束删除容器,不然还要手动删。
–network
加入到我们一开始为这个项目创建的docker bridge网络栈以链接数据库并且与其它模块容器通信。
–ip 172.30.0.10
一方面是固定调度中心的ip不会因重启容器而变化,二是执行器的注册地址不能使用网络栈的别名。
-p 8080:8080/tcp
映射调度中心web服务的端口以进行查看状态和管理。
然后点next它会构建一个基于admin dockerfile的镜像。
配置Run/Debug Configurations
依次选择:IDEA > Run > Edit Configurations > Manage targets 选择刚刚创建的 Run Targets(image_xljob_admin:0.0.1)然后Apply保存运行即可。
2.部署/集群 执行器
修改项目配置文件
将xxl-job-executor-sample-springbootd模块配置文件xxl.job.admin.addressed条目的值改http://172.30.0.10:8080/xxl-job-admin
xxl.job.admin.addresses=http://172.30.0.10:8080/xxl-job-admin
172.30.0.10是调度中心服务在docker网络栈中的地址,执行器需要找到调度中心以调用它的api进行执行器注册。
配置完成后像admin模块一样使用maven插件Lifecycle > package 进行打包(dockerfile里指定了ADD target/xxl-job-executor-sample-springboot-*.jar /app.jar所以idea部署项目到docker执行时会扫描项目 target/路径寻找对应jar包)
配置run targets
这里的容器运行选项只需要指定容器要加入的 bridge网络即可
集群
如果是根据上面的配置进行的话,集群就无须额外配置,只需要复制idea的启动项即可。
三、结果
启动一下你的项目看一下结果叭!