一, 搭建admin调度中心
1.1 安装docker运行环境
采用yum源安装直接安装:yum install -y docker
启动docker: service docker start
停止docker:service docker stop
1.2 拉取tomcat和mysql这两个docker镜像
这里使用网易公有镜像库, 访问: https://c.163yun.com/hub#/m/repository/ 即可
docker pull hub.c.163.com/library/tomcat:latest
docker pull hub.c.163.com/library/mysql:latest
拉取成功后执行docker images查看刚下载成功的镜像, 如下图:
1.3 启动tomcat和mysql docker镜像
docker run -d -p 8080:8080 hub.c.163.com/library/tomcat:latest
docker run -itd -p 3306:3306 hub.c.163.com/library/mysql:latest bash
检查是否成功启动, docker ps, 如下如显示则表示成功:
1.4 进入docker-tomcat或者docker-mysql的shell
使用如下命令:docker exec -it 容器id bash
1.5 停止和启动docker容器
docker ps -- 查看正在运行的docker容器
docker stop 容器id
docker start 容器id
1.6 编写dockerfile, 构建image镜像
构建xxl-job-admin.war, 这里简单的编写dockerfile文件进行构建, 毕竟重点是解析xxl-job源码.
from hub.c.163.com/library/tomcat
COPY xxl-job-admin.war /usr/local/tomcat/webapps
构建:
docker build . -t xxl-job-admin:latest
使用docker images就能查看到刚刚构建的docker镜像,如下图:
1.7 如果经过上面的步骤都没问题的话, 恭喜你, 终于到了重头戏, 启动咱们刚刚构建成功的xxl-job-admin docker镜像,按照前面的规划, job-admin调度中心部署在192.168.136.7:8080即可.
docker run -d -p 8080:8080 xxl-job-admin:latest
docker ps
1.8 浏览器输入地址访问admin调度中心
http://192.168.136.7:8080/xxl-job-admin/
二, 搭建executor执行器
1.1 按照之前的步骤编写dockerfile, 构建executor的两个执行器镜像即可, 如下图:
docker build . -t xxl-job-executor:latest
1.2 分别启动这两个执行器
docker run --privileged=true -d -p 8082:8080 -p 9999:9999 xxl-job-executor:latest
docker run --privileged=true -d -p 8082:8080 -p 9998:9999 xxl-job-executor:latest
说明:
由于每个executor执行器内部都会启动一个jetty server服务, 而默认的jetty服务端口就是9999端口,由于这两个executor执行器是放在同一台192.168.136.8服务器上, 所以不能使用同一个端口9999对外(即对admin调度中心)暴露服务.
所以这里做了9999:9999和9998:9999端口映射.
按照之前规划的, 使用同一个镜像启动两个executor执行器tomcat容器, 端口分别是8081和8082, 如上图所示.
1.3 检查刚启动的两个executor执行器, 是否自动注册到admin调度中心, 查看admin调度中心即可, 如下图.
说明此时的双节点的executor执行器均已自动注册到admin调度中心, 这里的172.17.0.2和172.17.0.3即是启动的docker executor执行器的ip.
在192.168.136.7服务器, 是访问不到docker容器内部端口, 172.17.0.2:9999和172.17.0.3:9999, 所以这里需要使用手动的方式编辑下ip:port, 如下图:
手动录入:192.168.136.8:9999,192.168.136.8:9998
192.168.136.8:9999 <=等价于=>172.17.0.2:9999 两者对应的ip:port是同一个
192.168.136.8:9998 <=等价于=>172.17.0.3:9999 两者对应的ip:port是同一个
修改完成后, 如下图所示即可:
到这里就完成了admin调度中心和executor执行的部署.
三, 使用xxl-job-admin开始调度一个job实例
1.1 创建一个任务, 如下图:
说明:
路由策略:第一个, 表示选取多个executor执行器注册到admin调度中心的第一个, 执行该job定时任务
阻塞处理策略:单机串行, 表示当上一个job还没有执行完成, cron时间片到后, 该次的job将阻塞, 一直到上一个job执行完成.
这两项配置, 这里我们暂时使用上述这样的配置, 以后源码解析时, 会做出详细的分析.
1.2 保存后, 当该任务的cron时间片到后, 就开始执行该任务
normal标识正常执行调度的状态, cron:0/30 * * * * ? 表示30秒执行一次.
1.3 查看调度日志
出现如上图所示结果,说明executor执行器已经开始被admin调度中心正常调度了.
四,总结
1 首先使用docker构建job-admin调度中心, 并启动.
2 接着使用docker构建job-executor执行器image镜像, 依托于该镜像, 启动两个executor执行器, 分别运行于8081和8082端口,
而executor执行器内部暴露的jetty server服务端口分别为9999和9998.
3 使用job-admin成功调度一个executor执行器实例.
好了, 到此为止, 已经成功使用docker 部署了admin调度中心和双节点executor执行器, 接下来会是重头戏, 进行源码解析, admin调度中心和executor执行器是怎样进行rpc远程通信以及数据交互的.