使用Feign通过服务名调用服务,找不到服务
Posted linyufeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Feign通过服务名调用服务,找不到服务相关的知识,希望对你有一定的参考价值。
报错环境:
- eureka注册中心在远程服务器上
- 本地服务注册到远程的eureka注册中心
- 本地服务通过Fegin组件+服务名调用服务
报错时,注册中心的情况:
Application Status
SERVICE-HOT 192.168.22.180:8308
SERVICE-REDIS 127.0.0.1:4046
SERVICE-ZUUL 127.0.0.1:4041
报错情况:
feign.RetryableException:
connect timed out executing
GET http://SERVICE-REDIS/redis/NaviKey-24149-1
at feign.FeignException.errorExecuting(FeignException.java:84)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:113)
排查后发现:是因为注册服务ip问题,导致本地服务无法通过服务名字找到相应的服务.
- 远程项目和eureka服务部署在同一台服务器上,所以通过127.0.0.1去服务中心注册服务是没问题的
- 本地项目通过远程服务器ip来注册服务,也没问题
- 在同一个注册中心上,可以互相发现服务,就是通过名字可以找到对方,没错
- 问题在于, 当本地SERVICE-HOT服务在eureka中心找到SERVICE-REDIS服务后,redis服务告诉他,我的服务ip地址是
127.0.0.1:4046
.那么,这就有问题了!!! - 本地服务和远程服务不在一台服务器上,你的
127.0.0.1
是自己的服务器ip,本地服务肯定找不到 - 所以,注册服务时,统一都使用服务器ip来注册就行了,修改后的配置中心如下:
Application Status
SERVICE-HOT 192.168.22.180:8308
SERVICE-REDIS 192.168.22.180:4046
SERVICE-ZUUL 192.168.22.180:4041
不修改服务注册配置,还有一种办法: 使用fegin时,通过url指定访问服务的ip
@FeignClient(value = "SERVICE-REDIS",
url="http://192.168.22.180:4041/service-redis" ,
fallback = RedisSvcFallback.class)
public interface RedisSvc {
以上是关于使用Feign通过服务名调用服务,找不到服务的主要内容,如果未能解决你的问题,请参考以下文章