当 xxl-job 遇上 docker → 它晕了,我也乱了!
<h2>开心一刻</h2><p> 公交车上,一位老大爷睡着了,身体依靠在背后的一位年轻小伙子身上</p>
<p> 小伙子一直保持站姿十几分钟,直到老人下车</p>
<p> 这位在校大学生,接受采访时说:”当时就觉得背后这个人很轻盈,以为是个姑娘!“</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114173301517-490787362.gif" width="200" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2>前提准备</h2>
<p> 对 xxl-job、docker 要有基本的了解</p>
<h3> xxl-job</h3>
<p> 直接看官网:xxl-ob,你想要的和不想要的,官网都有详细说明</p>
<p> 楼主也做了简单尝试:分布式任务调度平台 → XXL-JOB 初探、分布式任务调度平台 → XXL-JOB 实战</p>
<p> 示例版本: <span class="cnblogs_code">2.1.0</span> </p>
<h3> docker</h3>
<p> 网上资料很多,b站视频也挺多的(推荐:尚硅谷2022版Docker实战教程(docker教程天花板))</p>
<p> 楼主就不做介绍了(主要是楼主不知道呀!)</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221110163121081-1368782552.gif" alt="" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2>admin 和 executor 都单独部署</h2>
<p> 部署很简单,我就不具体演示了(不是主角,没戏份!)</p>
<p> 直接看效果</p>
<p> 192.168.8.222 上部署 <span class="cnblogs_code">xxl-job-admin</span> </p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221110171725143-1625699068.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 192.168.8.223 上部署 <span class="cnblogs_code">xxl-job-executor</span> </p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111084837989-859027742.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 是不是很简单?</p>
<p> 效果也和我们预想的一样</p>
<h2>admin 单独部署,executor 通过 docker 部署</h2>
<p> 192.168.8.223 安装 <span class="cnblogs_code">docker</span> ,安装过程我就不演示了,直接看效果</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111093617348-387042825.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> <span class="cnblogs_code">docker</span> 版本 <span class="cnblogs_code">20.10.21</span> </p>
<p> 大家注意,伴随着 <span class="cnblogs_code">docker</span> 的运行,多了一个网卡配置信息</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111095646430-1832927536.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 有兴趣的可以查阅下: <span class="cnblogs_code">docker</span> 网络的 <span class="cnblogs_code">bridge</span> 模式;这里先混个眼熟,<strong><span style="color: rgba(255, 0, 0, 1)">注意IP</span></strong> <span class="cnblogs_code">172.17.0.1</span> </p>
<h3> executor 和 docker 并存</h3>
<p> 此时我们重启下 <span class="cnblogs_code">xxl-job-executor</span> ,然后在 <span class="cnblogs_code">xxl-job-admin</span> 重新注册下执行器</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111103654204-1955831083.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 自动注册上来的机器IP是 <span class="cnblogs_code">172.17.0.1</span> ,而非 <span class="cnblogs_code">192.168.8.223</span> ,那么伴随而来的问题就是: <span class="cnblogs_code">xxl-job-admin</span> 访问不通 <span class="cnblogs_code">xxl-job-executor</span> </p>
<p> 我们改成手动注册,看看能否访问通</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111103827256-1529080029.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 可以看到,手动注册不受 <span class="cnblogs_code">docker</span> 的影响,能正常访问通</p>
<p> 而自动注册则受了 <span class="cnblogs_code">docker</span> 的影响,注册的IP不对,至于如何解决,请继续往下看</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111104227634-154555187.png" width="300" style="display: block; margin-left: auto; margin-right: auto"></p>
<h3> executor 通过 docker 部署</h3>
<p> 如何打将 <span class="cnblogs_code">xxl-job-executor</span> 打成 <span class="cnblogs_code">docker</span> 镜像,不是本文的内容,所以省略不演示(言外之意是需要大家自行去学习!)</p>
<p> 我们直接 <span class="cnblogs_code">run</span> 执行器镜像</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111134705350-1352351432.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 自动注册上来的IP <span class="cnblogs_code">172.17.0.2</span> ,很明显,问题( <span class="cnblogs_code">xxl-job-admin</span> 访问不通 <span class="cnblogs_code">xxl-job-executor</span> )再次出现</p>
<p> 那改成手动注册试试</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111135337843-1072364603.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 哟嚯, <span class="cnblogs_code">xxl-job-admin</span> 还是访问不通 <span class="cnblogs_code">xxl-job-executor</span> </p>
<p> 放弃抵抗吧,别挣扎了</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111135510168-582943880.png" alt="" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 少年莫急,我们的 <span class="cnblogs_code">xxl-job-executor</span> 是通过 <span class="cnblogs_code">docker</span> 部署的,你有把 <span class="cnblogs_code">docker</span> 容器的 <span class="cnblogs_code">9999</span> 端口映射到宿主机吗</p>
<p> (<span style="color: rgba(255, 0, 0, 1)"><strong>由于换了地方,IP也跟着变了</strong></span>, <span class="cnblogs_code">192.168.8.222</span> -> <span class="cnblogs_code">10.5.13.222</span> , <span class="cnblogs_code">192.168.8.223</span> -> <span class="cnblogs_code">10.5.13.223</span> )</p>
<p> 重启下 <span class="cnblogs_code">sample-executor:1.0</span> </p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111151300759-609064796.gif" alt="" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 我就问你,是不是通了?</p>
<h2>admin 和 executor 都通过 docker 部署</h2>
<p> <span class="cnblogs_code">executor</span> 通过 <span class="cnblogs_code">docker</span> 部署,前面已经讲过了</p>
<p> <span class="cnblogs_code">admin</span> 通过 <span class="cnblogs_code">docker</span> 部署,请看我表演</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111161654671-24226508.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 可以看到,手动注册是没有问题滴</p>
<p> 自动注册还要试吗?</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111162305260-304638077.gif" alt="" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2>自动注册IP问题</h2>
<p> 前面说了那么多,最终回归到一个问题:<span style="color: rgba(255, 0, 0, 1)"><strong>自动注册的IP为什么不是 <span class="cnblogs_code">Docker</span> 宿主机的IP</strong></span>?</p>
<p> 不管是 <span class="cnblogs_code">xxl-job-admin</span> 还是 <span class="cnblogs_code">xxl-job-executor</span> ,都是直接用的官方的代码,楼主可一行都没改</p>
<p> 那肯定是 <span class="cnblogs_code">xxl-job</span> 自动注册没有做好 <span class="cnblogs_code">docker</span> 的兼容呗</p>
<p> 这可不是我瞎说, <span class="cnblogs_code">github</span> 上 <span class="cnblogs_code">xxl-job</span> 有很多相关的 <span class="cnblogs_code">issue</span> (191、630、1121、1658、1668)</p>
<p> 许大大在源码中也给出了解决方案, <span class="cnblogs_code">xxl-job-executor-sample-springboot</span> 有个类: <span class="cnblogs_code">XxlJobConfig.java</span> ,其中有如下说明</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114094355871-1696442161.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 那试试呗,我们对 <span class="cnblogs_code">xxl-job-executor-sample-springboot</span> 进行改造</p>
<p> 引入依赖</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114140912992-2146077853.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 修改 <span class="cnblogs_code">XxlJobConfig.java</span> </p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114143355707-1945757167.png" width="900" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 添加配置</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114141151541-709417265.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<h3> executor 和 docker 并存</h3>
<p> <span class="cnblogs_code">docker</span> 运行,但 <span class="cnblogs_code">executor</span> 不通过 <span class="cnblogs_code">docker</span> 部署</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114144606404-1804826248.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 自动注册的ip竟然是: <span class="cnblogs_code">127.0.0.1</span> ,莫非要通过 <span class="cnblogs_code">docker</span> 部署?</p>
<h3> executor 通过 docker 部署</h3>
<p> 镜像我已经打包好: <span class="cnblogs_code">sample-executor:1.1</span> ,我们来看下效果</p>
<p><span class="marker"><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114153211896-1582617315.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></span></p>
<p> 自动注册的ip是 <span class="cnblogs_code">172.17.0.2</span> ,不是宿主机ip: <span class="cnblogs_code">10.5.13.223</span> ,莫非 <span class="cnblogs_code">docker</span> 镜像打的有问题?</p>
<p> 我们进容器内看看日志</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114153617432-1664373192.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 我们再看看容器内的网卡配置信息</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114154351441-1640825070.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 请问这如何获取宿主机IP( <span class="cnblogs_code">10.5.13.223</span> )?</p>
<p> 许大欺我?</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114154836037-106714138.gif" width="200" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2>总结</h2>
<p> 1、就目前来看,一旦 <span class="cnblogs_code">xxl-job-executor</span> 遇上 <span class="cnblogs_code">Docker</span> ,自动注册就不对了</p>
<p> 知道如何处理的小伙伴,欢迎评论区留言</p>
<p> 2、自动注册不行了,那就用手动注册呗</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114163016138-1326038173.png" width="300" style="display: block; margin-left: auto; margin-right: auto"></p>
<p> 3、大家自己验证的时候,一定要注意 <span class="cnblogs_code">docker</span> 与宿主机的端口映射</p><br><br>
来源:https://www.cnblogs.com/youzhibing/p/16712462.html
頁:
[1]