xxljob docker 部署 基于 xuxueli/xxl-job-admin:2.4.0 镜像
181' 2024-07-26 16:07:03 阅读 78
XXLJOB
官方文档:
分布式任务调度平台XXL-JOB
1、安装mysql(docker)
1.1 依赖mysql8.0 。若本机未安装mysql 。可一并使用 docker 部署。参考这一篇,很详细,大学生也能学会。
写最好的Docker安装最新版MySQL8(mysql-8.0.31)教程(参考Docker Hub和MySQL官方文档)_docker mysql8-CSDN博客
1.2 在 mysql 中创建 xxljob 用户并授权
进入 mysql 容器
<code># 查看当前的容器 。确保 mysql 容器运行中
docker ps -a
# 交互式进入容器
docker exec -it e0788a971ce9 /bin/bash
以 root 用户连接mysql
<code>mysql -u root -p
使用mysql 数据库
use mysql;
创建用户 xxljob
# 创建用户 xxljob 并设置密码 123456
create user xxljob@'%' identified by '123456';
授权&刷新权限
# 授予 xxljob 用户所有数据库所有表的权限(当然也可以只授权 xxl_job 数据库)
# 第一个* 代表所有数据库 第二个*代表所有表。xxl_job.* 代表xxl_job 库下的所有表
grant all privileges on *.* to xxljob@'%' with grant option;
# 刷新权限
flush privileges;
设置 xxljob 用户支持远程密码连接
alter user xxljob@'%' identified with mysql_native_password by '123456';
之后就可以用 xxljob 用户连接了。
1.3 执行官方 sql 脚本
我这里选择用 goland 的数据库连接工具来连接数据库。由于docker 将 mysql 容器的3306 端口映射到了本机,所以可以使用 127.0.0.1 连接。docker真是太强了!
连接后开启一个会话,执行官方脚本就行。我这里用的 2.4.2 版本的sql脚本。
1 选择sql文件
2 在 xxl_job 上新建一个会话
3 全选内容并执行
1.4 检查一下
xxl_job 下有如下表
2、安装 xxljob-admin(docker)
2.1 拉取镜像
之前我们 sql 文件用的 2.4.2 版本的文件。镜像可以用 2.4.0 (2.4.2镜像没拉到,应该是2.x 版本是通用的)。好多教程是 2.0.x 或者 2.2.x 版本的。会遇到 表字段不对的问题,很明显作者有更新,感兴趣可以看下源码。
<code>docker pull xuxueli/xxl-job-admin:2.4.0
2.2 获取mysql容器ip
我们的 mysql 也是通过 docker 安装的。所以两个容器之间通信需要他们容器内ip
直接命令获取 这里最后是你的容器名称或id 。我们要获取mysql 容器的,所以是mysql
docker inspect -f '{ {range.NetworkSettings.Networks}}{ {.IPAddress}}{ {end}}' mysql
查看网络配置获取
首先获取 docker 的可用网络
docker network ls
然后查看 beidge 的网络详情。可以看到 mysql 得ip 为 172.17.0.2
<code>docker network inspect 0608ff7e961a
2.3 创建并运行 xxl-job-admin 容器
命令解释:
-e 指定参数
–spring.datasource.url 指定mysql 连接的 dsn ip为 2.2 获取的 mysql 容器ip
–spring.datasource.username 指定 mysql 连接的用户
–spring.datasource.password 指定 mysql 连接用户的密码
-p 将本机的 8080 端口的流量转发到 xxljob-admin 容器的 8080 端口
-v 将容器的 /data/applogs 目录挂载到本机 /Users/xwh/volumes/xxl-job/applogs 目录 (/Users/xwh 目录是当前用户的家目录~)该目录自定义即可。
–name 容器名设置为 xxl-job-admin-2.4.0
最后使用 xuxueli/xxl-job-admin:2.4.0 这个镜像创建并运行容器
<code>docker run
-e PARAMS="--spring.datasource.url=jdbc:mysql://172.17.0.2:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 --spring.datasource.username=xxljob --spring.datasource.password=123456" code>
-p 8080:8080
-v /Users/xwh/volumes/xxl-job/applogs:/data/applogs
--name xxl-job-admin-2.4.0 xuxueli/xxl-job-admin:2.4.0
2.4 登录管理台
容器运行后。在本机浏览器访问 http://127.0.0.1:8080/xxl-job-admin 即可进入xxljob管理端。默认用户 admin 密码 123456 。登录成功就大功告成了!
3、golang 客户端代码
已上传github 和gitee。
GitHub - ainiou/xxljob-demo
181s/xxljob-demo
3.1 讲下配置文件
稍微讲下配置文件,这个 ServerAddr 一定要带上 /xxl-job-admin ,不然注册 404;AccessToken 启动时没指定的话就用 default_token 。 AppName 没啥注意的,就是跟执行器AppName 一致 。Port 别被其他服务占用就行。
<code>[xxljob] # xxljob的配置
ServerAddr = "http://127.0.0.1:8080/xxl-job-admin" # xxl-job-admin地址
AccessToken = "default_token" # xxl-job-admin accessToken
AppName = "xxljob-demo" # 执行器名称 一般对应自己的应用名
Port = 8088 # 执行器端口 默认9999
4、使用
可以参考官方文档。我这基于上面的代码给个例子。
4.1 新增执行器
在执行器管理新增一个执行器。AppName 一般是服务名称,只要代码配置中的AppName 要与之对应就行,我这里取服务吗 xxljob-demo;名称随便。注册方式的话,自动注册会由服务启动后自动订阅该执行器的任务;手动录入则自己输入自己服务的 ip:port。这里我们直接选择自动注册。
4.2 新增任务
在任务管理新建一个任务。记得先选择执行器为自己新建的执行器xxljob-demo (这里显示的是执行器名称)。 Cron 是一个表达式。可以点击旁边的小按钮手动选,也可以自己输入。我这里这个表达式的意思为 每分钟的第 0 秒执行一次。 JobHandler 是任务的路由,在我们服务中注册定时任务会用到。
检查下次启动时间,是不是一分钟一次
4.3 启动定时任务
点启动就行。启动之后可以看下注册节点,应该是空的,需要我们启动服务来运行客户端。
4.4 启动服务
在服务目录下执行
<code>go run main.go
或者ide启动main函数。启动后控制定时输出 执行器注册成功。(要是 404 看 3.1);回后台可以看到注册节点已经有本机ip:port 了。没有就刷新下,还没有就是有问题了。
启动后可以看到,没分钟的第0s 都执行了 hello 路由下的逻辑。即打印hello world 与当前时间。
4.5 手动执行
想立即看效果还可以在后台任务操作里选择 执行一次。会立即执行,可以自己试试看。
5、可能遇到的坑
1、 Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘t.job_cron’ in ‘field list’
意思是 找不到 job_cron 字段。联系上下文看到是 xxl_job_info 表的 job_cron 字段。我们从最新的官方sql脚本可以看到,xxl_job_info 确实是没有 job_cron 字段的。
xxl-job/doc/db/tables_xxl_job.sql at master · xuxueli/xxl-job
原因:XXLJOB 迭代可能移除了该字段。
解决:镜像应该拉取较新的 tag。由于作者没有维护 least 版本,我们也很难知道应该拉取哪个tag。有个技巧是参考分支拉取镜像。比如我这里用 2.4.0 中的 sql 脚本文件执行。那就拉取 2.4.0 tag 的docker 镜像。
2、Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘xxl_job.xxl_job_qrtz_trigger_group’ doesn’t exist
原因与解决办法同1,都是版本问题。
3、Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLSyntaxErrorException: Unknown database ‘xxl-job’
原因:dbname 是 xxl_job 而不是 xxl-job 。有篇blog 有误导。可能只有我没注意到吧.
4、Access denied for user ‘root’@‘172.17.0.2’
权限错误。官方命令默认使用 root 用户,密码为 123456 登录mysql 。但是msql 的 root 用户默认不允许远程连接。我们可以把root用户设置为远程连接。但不推荐。这里采用新建 xxljob 用户,并开放 xxljob 用户远程连接权限的方式。具体参考 1.2 。
上一篇: Ubuntu 22.04 server 安装GNOME/XFCE/KDE桌面环境
下一篇: 银河麒麟桌面操作系统V10 SP1 断网离线安装Java8/Mysql5.7/Tomcat8/nginx/php/node.js 图文详解版
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。