👨🏻💻 热爱摄影的程序员
👨🏻🎨 喜欢编码的设计师
🧕🏻 擅长设计的剪辑师
🧑🏻🏫 一位高冷无情的全栈工程师
欢迎分享 / 收藏 / 赞 / 在看!
【问题】
在使用 Seata 时,客户端一直报无法连接服务端:
- 0101 can not connect to 172.18.0.1:8091 cause:can not register RM,err:can not connect to services-server.
io.seata.common.exception.FrameworkException: can not register RM,err:can not connect to services-server.
at io.seata.core.rpc.netty.NettyClientChannelManager.doConnect(NettyClientChannelManager.java:240)
at io.seata.core.rpc.netty.NettyClientChannelManager.acquireChannel(NettyClientChannelManager.java:109)
at io.seata.core.rpc.netty.NettyClientChannelManager.reconnect(NettyClientChannelManager.java:186)
at io.seata.core.rpc.netty.AbstractNettyRemotingClient$1.run(AbstractNettyRemotingClient.java:115)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:305)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:840)
2024-01-20 02:04:03 [timeoutChecker_2_1] INFO i.s.c.r.n.NettyClientChannelManager
- will connect to 172.18.0.1:8091
2024-01-20 02:04:03 [timeoutChecker_2_1] INFO i.s.c.r.netty.RmNettyRemotingClient
- RM will register :jdbc:mysql://10.211.55.9:3306/bchtx-cloud
2024-01-20 02:04:03 [timeoutChecker_2_1] INFO i.s.c.rpc.netty.NettyPoolableFactory
- NettyPool create channel to transactionRole:RMROLE,address:172.18.0.1:8091,msg:< RegisterRMRequest{resourceIds='jdbc:mysql://10.211.55.9:3306/bchtx-cloud', version='1.7.1', applicationId='bchtx-system', transactionServiceGroup='bchtx-system-group', extraData='null'} >
2024-01-20 02:04:13 [timeoutChecker_1_1] ERROR i.s.c.r.n.NettyClientChannelManager
- 0304 register RM failed.
【解决】
在查看 Nacos 的服务列表信息中发现,Seata 服务端的 IP 与其他服务不在同一网段,而是处于 Docker 容器内部的网络中。
经过排查,确定是启动 Nacos 容器时漏加了 network_mode 参数,导致问题的产生。只要保证 Seata 服务端与其他服务在同一网段即可。