最近在学习使用seata处理分布式事务,在启动过程中遇到了问题:
我在虚拟机上配置的docker,配置了mysql、nacos都没有问题,但是在启动seata时会出现闪退的情况,查看了seata的日志,显示连接不上nacos,报错如下:
Caused by: com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/instance after all servers([nacos:8848]) tried: java.net.UnknownHostException: nacos
这里的nacos:8848是配置文件指定的nacos访问名和访问端口
问题分析:seata和nacos所在的网络不一致
由于我在配置nacos的时候没有配置网络,导致nacos连接的是默认的网络bridge,而seata和Mysql连接的是后来自定义的网络,所以seata就不能直接通过容器的网络名称nacos进行连接因为他们不在同一个网络上。
那么问题来了:我可不可以修改seata的配置文件,直接通过ip+指定端口的方式访问nacos呢?
这我也试过了,报错nacos拒绝连接
问题解决:删除了nacos容器,并重新配置了nacos和seata所在的网路均为自定义的网络,依次启动后问题解决。
【注意】在启动顺序上,最好按照mysql->nacos->seata的顺序进行启动