这行代码没BUG

一个相信努力可以改变人生的人,我相信一切的上进行为都是值得的,至少可以让我看见更大的世界。

Docker 部署xxl-job 报错:xxl-rpc remoting error(connect timed out), for url : xxxxxx

使用Docker 部署的xxl-job,当调度中心和执行器部署在不同的容器内,此时xxl-job调用执行器的服务就会报:

address:http://172.0.0.1:8841/
code:500
msg:xxl-rpc remoting error(connect timed out), for url : http://172.0.0.1:8841/run

经过排查和询问度娘,发现是执行器的服务被调用的接口没有在docker容器进行映射,也就是图中的8841端口。

另外,Docker容器默认使用 bridge 模式的网络。该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内。Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部。

在bridge网络模式下,容器之间相互访问,用自动注册的ip就会失败,应该用Docker容器的桥接 ip:172.17.0.1

问题解决:

  1. 把xxl-job执行器通过netty服务启动的端口进行映射,图上的8841端口

  1. 在xxl-job调度中心的页面,把执行器的注册方式由自动改为手动 ip:172.17.0.1

最后,调用成功!!!


posted @ 2022-03-15 10:13  这行代码没Bug  阅读(12399)  评论(0编辑  收藏  举报