spring cloud 版本 Dalston.RELEASE

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>

 

服务提供者向eureka注册中心注册时,默认以hostname的形式上报,上报成功之后,默认以localhost显示,如:

 

 

此时如果请求经过zuul网关转发到后台的服务提供者的话,

如果服务提供者和zuul网关在同一台机器上,大家都是localhost的域名,那就没问题,能发现服务;

如果服务提供者和zuul网关不在同一台机器上,会报一个没找到服务的异常,原因是根据localhost和端口没有找到相应的服务。

此时,一种解决方法是让服务提供者上报自己的 ip地址,并显示在Eureka的注册列表中。

只需要在服务者的配置文件application.properties上添加两个配置:

eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${server.port}

 重新发布提供者之后,能正常显示:



 

这样,经过zuul网关的请求,就能正常的转发到后台的服务提供者。

 

 

------------------分隔线--------------------

如果只是配置了eureka.instance.prefer-ip-address=true,而不配置eureka.instance.instance-id

那还是显示localhost,但ip地址是可以访问得了。

 

 

 

-----------------------------------------------

 

Eureka Client并没有自己实现探测本机IP的逻辑,而是交给Spring的org.springframework.cloud.commons.uti.InetUtils工具类的findFirstNonLoopbackAddress()方法完成

下面这位哥们分析了eureka 客户端是如何获取本机ip地址:

http://blog.csdn.net/neosmith/article/details/53126924

 

 

 

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐