工程师A接手了3台新服务器,用于部署业务微服务,但是在启动微服务时,报找不到配置信息,配置信息是配置在 spring cloud config中;
经过几轮异常点排查,未找出原因,检查项如下:
1. 新服务器ping注册中心ip/配置中心ip,都能测试通过;
2. 新服务器netstat端口检测也正常;
3. 微服务启动脚本 java -jar 命令与其他正常启动的微服务脚本也相同,没有异常配置;
4. 一度怀疑是微服务代码的问题,因此做排除测试,把微服务脚本在原有部署业务微服的老机器上执行,服务正常启动;
初步结论: 新服务器与配置中心/注册中心存在网络访问问题;
进一步测试:
发现老服务器的host文件中,加入了所有其他微服务机器及注册中心、配置中心机器的本地域名与ip的配置;
注册中心eureka的服务列表中也显示的是 host域名服务,如下图:
由此猜测:新机器中没有配置【所有其他微服务机器及注册中心、配置中心机器的本地域名与ip的配置】,检查host配置文件,果然无任何配置,加入host域名映射文件,再次启动微服务,微服务启动成功;
最终结论:
1. 如果微服务在启动过程中,不是使用ip:port模式注册服务,则使用本机host中的域名往注册中心进行注册微服务;
2. 本地微服务调用其他微服务时,则需要通过host文件中的域名配置找到真正的服务ip和端口,进行服务调用,如果没有配置,则服务调用会失败;
如下图:使用域名注册服务,则RibbonServer客户端的服务列表为:http://域名:端口