feign客户端与eureka服务不在同一服务器出现服务访问报connection refused错误

  最近公司一个项目技术架构是springcloud全家桶,微服务治理当然就是eureka,客户端调用是feign调用,接近生产发布阶段我们想每个eureka服务部署两个实例对服务端进行负载均衡,刚开始两台机子的服务起来后项目跑着看起来是没问题的,但是我们测试为了验证多种情况,我们停掉了一个服务器的服务,只保留feign客户端,当外部请求命中这个feign客户端的时候就报错了,

  exception is feign.RetryableException: Connection refused (Connection refused) executing GET http://...

  于是我打开eureka界面查看服务情况,服务的状态都是正常的,但是看feign客户端看上去确实访问了,我又把feign客户端所在机器的服务起来,另外一台的服务停掉,再次访问,ok,不报错的,很正常,就这样反复尝试几次,发现feign客户端和服务提供者不在同一个服务器就会报这个错误,首先由于刚开始搭建多服务实例环境的时候由于看见实例名字是以localhost:XXX显示的,所以一开始就用了ip方式注册上去

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

 

上图所示显示的都是ip加端口,没有ip注册方式之前会有一个实例是localhost:端口的,理论上我觉得feign客户端访问的时候就应该可以访问到服务,但是就是不可以,与我把鼠标悬浮上实例名字上看左下角

 这个图是最后修改后可以访问的图,是显示正确的,在修改之前这里显示的localhost,说明暴露出来的主机名字还是本机不是实际的服务器,所以eureka服务注册的时候给定一个主机名为机器IP地址就可以,在之前配置基础上加如下配置

eureka.instance.hostname= ${spring.cloud.client.ip-address}

 重启服务重新注册到eureka 成功验证

猜你喜欢

转载自www.cnblogs.com/kevin-w/p/12674483.html
今日推荐