开心一刻

  公交车上,一位老大爷睡着了,身体依靠在背后的一位年轻小伙子身上

  小伙子一直保持站姿十几分钟,直到老人下车

  这位在校大学生,接受采访时说:”当时就觉得背后这个人很轻盈,以为是个姑娘!“

前提准备

  对 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 (191630112116581668

  许大大在源码中也给出了解决方案, 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 → 它晕了,我也乱了!的更多相关文章

  1. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

  2. .NET遇上Docker - Harbor的安装与基本使用

    Harbor是一个开源企业级Docker注册中心,可以用于搭建私有的Docker Image仓库.可以实现权限控制等. 安装Harbor 首先,需要安装Docker和Docker Compose,参考 ...

  3. .NET遇上Docker - Docker集成Cron定时运行.NETCore(ConsoleApp)程序.md

    配置项目的Docker支持 对于VS中Docker的配置,依旧重复一些废话. 给项目添加Docker支持,VS2015可以直接使用Docker for VS插件,VS2017在安装时选择容器支持.VS ...

  4. 当DOCKER遇上ESXI

    特别是你要为DOCKER窗口设置静态IP,且和公司局域网打成一片的时候, 苦逼的测试就会开始,我差不多前前后后测试了四五天,一百多个容器报废. NETNS,NSENTER,PIPWORK,各种镜像合下 ...

  5. LoadRunner - 当DiscuzNT遇上了Loadrunner(中) (转发)

    当DiscuzNT遇上了Loadrunner(中) 在上文中,介绍了如果录制脚本和设置脚本执行次数.如果经过调试脚本能够正常工作的话,就可以设置并发用户数并进行压力测试了. 首先我们通过脚本编辑界面上 ...

  6. 前端遇上Go: 静态资源增量更新的新实践

    前端遇上Go: 静态资源增量更新的新实践https://mp.weixin.qq.com/s/hCqQW1F8FngPPGZAisAWUg 前端遇上Go: 静态资源增量更新的新实践 原创: 洋河 美团 ...

  7. 微服务中台落地 中台误区 当中台遇上DDD,我们该如何设计微服务

    小结: 1. 微服务中台不是 /1堆砌技术组件就是中台 /2拥有服务治理就是中台 /3增加部分业务功能就是中台 /4Cloud Native 就是中台 https://mp.weixin.qq.com ...

  8. MVC遇上bootstrap后的ajax表单模型验证

    MVC遇上bootstrap后的ajax表单验证 使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了, ...

  9. 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)

      邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...

  10. 敏捷遇上UML—软创基地马年大会(广州站 2014-4-19)

        我们将在广州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战技巧. 时间:2 ...

随机推荐

  1. 痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的QPI/OPI模式

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在FDCB里使能串行NOR Flash的QPI/OPI模式. 我们知道 Flash 读时序里有五大子序列 CMD + ADDR + MO ...

  2. 并发与并行,同步和异步,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang并发编程之GoroutineEP13

    如果说Go lang是静态语言中的皇冠,那么,Goroutine就是并发编程方式中的钻石.Goroutine是Go语言设计体系中最核心的精华,它非常轻量,一个 Goroutine 只占几 KB,并且这 ...

  3. Golang 动态脚本调研

    一.技术背景 1.1 程序的动态链接技术 在实际开发过程中,我们经常需要动态地更新程序的功能,或者在不变更程序主体文件的情况下添加或者更新程序模块. 1.1.1 动态链接库 首先最常见的是window ...

  4. 离线方式安装高可用RKE2 (版本: v1.22.13+rke2r1)记录

    说明: 想要了解RKE2可以到官网(https://docs.rke2.io 或 https://docs.rancher.cn/docs/rke2/_index/)看最新资料 用官网给出的离线安装( ...

  5. 以软件定义物联网芯片,以技术融合推动LPWAN2.0泛在物联

    作为数字化产业重要的基础设施之一,物联网迎来了黄金发展期.物联网通信技术通过数据的采集.分析.输出,从浅层次的互联工具和产品深化,到成为重塑生产组织方式的基础设施和关键要素,正深刻地改变着传统产业形态 ...

  6. Python数据科学手册-Numpy数组的计算:广播

    广播可以简单理解为用于不同大小数组的二元通用函数(加减乘等)的一组规则 二元运算符是对相应元素逐个计算 广播允许这些二元运算符可以用于不同大小的数组 更高维度的数组 更复杂的情况,对俩个数组的同时广播 ...

  7. Linux病毒扫描工具ClamAV(Clam AntiVirus)安装使用

    在线检测木马病毒的网址:https://www.virustotal.com/gui/home/upload 一.简介 ClamAV(Clam AntiVirus)是Linux平台上的开源病毒扫描程序 ...

  8. 关于Elasticsearch使用java的说明

    从Elastic 7.0开始,我们可以不安装JAVA.安装包包含一个相匹配的JAVA版本在里面. Elasticsearch包含来自JDK维护者(GPLv2 + CE)的捆绑版OpenJDK. 要使用 ...

  9. 【前端必会】单页应用-你的新朋友wepack

    背景 我们开发的功能可能是简单的,但是实现功能的代码行数却可能成千上万 出于易于维护.安全.服用,我们会根据我们的经验设计我们的代码,拆解成多个独立的功能模块(代码片段.更多的文件) JS的模块规范有 ...

  10. css 悬停图片改变图片的样式

    <style> #div{ text-align: center; } .img{ width: 200px; clip-path: polygon(50% 0,100% 50%,50% ...