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
所有评论(0)