当 xxl-job 遇上 docker → 它晕了,我也乱了!
开心一刻
公交车上,一位老大爷睡着了,身体依靠在背后的一位年轻小伙子身上
小伙子一直保持站姿十几分钟,直到老人下车
这位在校大学生,接受采访时说:”当时就觉得背后这个人很轻盈,以为是个姑娘!“
前提准备
对 xxl-job、docker 要有基本的了解
xxl-job
直接看官网:xxl-ob,你想要的和不想要的,官网都有详细说明
楼主也做了简单尝试:分布式任务调度平台 → XXL-JOB 初探、分布式任务调度平台 → XXL-JOB 实战
示例版本: 2.1.0
docker
网上资料很多,b站视频也挺多的(推荐:尚硅谷2022版Docker实战教程(docker教程天花板))
楼主就不做介绍了(主要是楼主不知道呀!)
admin 和 executor 都单独部署
部署很简单,我就不具体演示了(不是主角,没戏份!)
直接看效果
192.168.8.222 上部署 xxl-job-admin
192.168.8.223 上部署 xxl-job-executor
是不是很简单?
效果也和我们预想的一样
admin 单独部署,executor 通过 docker 部署
192.168.8.223 安装 docker ,安装过程我就不演示了,直接看效果
docker 版本 20.10.21
大家注意,伴随着 docker 的运行,多了一个网卡配置信息
有兴趣的可以查阅下: docker 网络的 bridge 模式;这里先混个眼熟,注意IP 172.17.0.1
executor 和 docker 并存
此时我们重启下 xxl-job-executor ,然后在 xxl-job-admin 重新注册下执行器
自动注册上来的机器IP是 172.17.0.1 ,而非 192.168.8.223 ,那么伴随而来的问题就是: xxl-job-admin 访问不通 xxl-job-executor
我们改成手动注册,看看能否访问通
可以看到,手动注册不受 docker 的影响,能正常访问通
而自动注册则受了 docker 的影响,注册的IP不对,至于如何解决,请继续往下看
executor 通过 docker 部署
如何打将 xxl-job-executor 打成 docker 镜像,不是本文的内容,所以省略不演示(言外之意是需要大家自行去学习!)
我们直接 run 执行器镜像
自动注册上来的IP 172.17.0.2 ,很明显,问题( xxl-job-admin 访问不通 xxl-job-executor )再次出现
那改成手动注册试试
哟嚯, xxl-job-admin 还是访问不通 xxl-job-executor
放弃抵抗吧,别挣扎了
少年莫急,我们的 xxl-job-executor 是通过 docker 部署的,你有把 docker 容器的 9999 端口映射到宿主机吗
(由于换了地方,IP也跟着变了, 192.168.8.222 -> 10.5.13.222 , 192.168.8.223 -> 10.5.13.223 )
重启下 sample-executor:1.0
我就问你,是不是通了?
admin 和 executor 都通过 docker 部署
executor 通过 docker 部署,前面已经讲过了
admin 通过 docker 部署,请看我表演
自动注册还要试吗?
自动注册IP问题
前面说了那么多,最终回归到一个问题:自动注册的IP为什么不是 Docker 宿主机的IP?
不管是 xxl-job-admin 还是 xxl-job-executor ,都是直接用的官方的代码,楼主可一行都没改
那肯定是 xxl-job 自动注册没有做好 docker 的兼容呗
这可不是我瞎说, github 上 xxl-job 有很多相关的 issue (191、630、1121、1658、1668)
许大大在源码中也给出了解决方案, xxl-job-executor-sample-springboot 有个类: XxlJobConfig.java ,其中有如下说明
那试试呗,我们对 xxl-job-executor-sample-springboot 进行改造
引入依赖
修改 XxlJobConfig.java
添加配置
executor 和 docker 并存
docker 运行,但 executor 不通过 docker 部署
自动注册的ip竟然是: 127.0.0.1 ,莫非要通过 docker 部署?
executor 通过 docker 部署
镜像我已经打包好: sample-executor:1.1 ,我们来看下效果
自动注册的ip是 172.17.0.2 ,不是宿主机ip: 10.5.13.223 ,莫非 docker 镜像打的有问题?
我们进容器内看看日志
我们再看看容器内的网卡配置信息
请问这如何获取宿主机IP( 10.5.13.223 )?
许大欺我?
总结
1、就目前来看,一旦 xxl-job-executor 遇上 Docker ,自动注册就不对了
知道如何处理的小伙伴,欢迎评论区留言
2、自动注册不行了,那就用手动注册呗
3、大家自己验证的时候,一定要注意 docker 与宿主机的端口映射
当 xxl-job 遇上 docker → 它晕了,我也乱了!的更多相关文章
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- .NET遇上Docker - Harbor的安装与基本使用
Harbor是一个开源企业级Docker注册中心,可以用于搭建私有的Docker Image仓库.可以实现权限控制等. 安装Harbor 首先,需要安装Docker和Docker Compose,参考 ...
- .NET遇上Docker - Docker集成Cron定时运行.NETCore(ConsoleApp)程序.md
配置项目的Docker支持 对于VS中Docker的配置,依旧重复一些废话. 给项目添加Docker支持,VS2015可以直接使用Docker for VS插件,VS2017在安装时选择容器支持.VS ...
- 当DOCKER遇上ESXI
特别是你要为DOCKER窗口设置静态IP,且和公司局域网打成一片的时候, 苦逼的测试就会开始,我差不多前前后后测试了四五天,一百多个容器报废. NETNS,NSENTER,PIPWORK,各种镜像合下 ...
- LoadRunner - 当DiscuzNT遇上了Loadrunner(中) (转发)
当DiscuzNT遇上了Loadrunner(中) 在上文中,介绍了如果录制脚本和设置脚本执行次数.如果经过调试脚本能够正常工作的话,就可以设置并发用户数并进行压力测试了. 首先我们通过脚本编辑界面上 ...
- 前端遇上Go: 静态资源增量更新的新实践
前端遇上Go: 静态资源增量更新的新实践https://mp.weixin.qq.com/s/hCqQW1F8FngPPGZAisAWUg 前端遇上Go: 静态资源增量更新的新实践 原创: 洋河 美团 ...
- 微服务中台落地 中台误区 当中台遇上DDD,我们该如何设计微服务
小结: 1. 微服务中台不是 /1堆砌技术组件就是中台 /2拥有服务治理就是中台 /3增加部分业务功能就是中台 /4Cloud Native 就是中台 https://mp.weixin.qq.com ...
- MVC遇上bootstrap后的ajax表单模型验证
MVC遇上bootstrap后的ajax表单验证 使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了, ...
- 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)
邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...
- 敏捷遇上UML—软创基地马年大会(广州站 2014-4-19)
我们将在广州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战技巧. 时间:2 ...
随机推荐
- RabbitMQ 入门系列:7、保障消息不重复消费:产生消息的唯一ID。
系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...
- Docker 搭建 Nexus3 私服 | 基本操作
1 Docker 安装 Nexus3 1.1 创建目录 在硬盘上创建 Nexus3 的主目录: mkdir -p /Users/yygnb/dockerMe/nexus3 为该目录添加权限: chmo ...
- 第五十四篇:网络通信Axios
好家伙,补充知识 1.什么是Axios? Axios可以在浏览器中发送 XMLHttpRequests Axios 是一个基于 promise 的 HTTP 库,简单的讲就是可以发送get.post请 ...
- Java常用类的使用
Java常用类 1. Optional 在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行 一 些防御式的检查,所以在代码中常常可见if( ...
- 【Android 逆向】手动构造dex文件
public class Hello { public static void main(String[] args) { System.out.println("hello android ...
- Netty 学习(三):通信协议和编解码
Netty 学习(三):通信协议和编解码 作者: Grey 原文地址: 博客园:Netty 学习(三):通信协议和编解码 CSDN:Netty 学习(三):通信协议和编解码 无论使用 Netty 还是 ...
- Kubernetes 日志:日志收集架构
应用程序和系统日志可以帮助我们了解集群内部的运行情况,日志对于我们调试问题和监视集群情况也是非常有用的.而且大部分的应用都会有日志记录,对于传统的应用大部分都会写入到本地的日志文件之中.对于容器化应用 ...
- ConfigMap使用说明
ConfigMap概述 ConfigMap供容器使用的典型用法如下. (1)生成为容器内的环境变量. (2)设置容器启动命令的启动参数(需设置为环境变量). (3)以Volume的形式挂载为容器内部的 ...
- 使用Docker方式部署Mongodb多副本集(replSet)
linux主机ip:192.168.0.253 1. 创建网络与容器 docker pull mongo docker network create mongo-rs docker run --nam ...
- ASP.NET Core GRPC 和 Dubbo 互通
一.前言 Dubbo 是比较流行的服务治理框架,国内不少大厂都在使用.以前的 Dubbo 使用的是私有协议,采集用的 hessian 序列化,对于多语言生态来说是极度的不友好.现在 Dubbo 发布了 ...