通过Feign进行调用@FeignClient 找不到的解决方案

网友投稿 2362 2022-10-25

通过Feign进行调用@FeignClient 找不到的解决方案

通过Feign进行调用@FeignClient 找不到的解决方案

目录Feign进行调用@FeignClient找不到通过Feign进行调用Feign通过服务名调用服务,找不到服务报错环境报错时,注册中心的情况报错情况

Feign进行调用@FeignClient 找不到

通过Feign 进行调用

这里配置spring-cloud 版本为 M8的

1.8

Finchley.M8

引入依赖

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

http://

org.springframework.cloud

spring-cloud-starter-openfeign

2.0.0.RC1

注意:spring-cloud 版本一定要选好,不然可能会找不到FeignClient,

再网上看到这样一句话:

Spring Cloud对Feign的支持由org.springframework.cloud:spring-cloud-netflix-core

移到org.springframework.cloud:spring-cloud-openfeign-core下,

Finchley.M8版本下的spring-cloud-starter-openfeign:2.0.0.M2的pom依赖文件中导入的是

spring-cloud-netflix-core而非spring-cloud-openfeign-core,

需要我们在pom文件中添加对应依赖管理使spring-cloud-starter-openfeign版本

更新到2.0.0.RC1

那么接下来我们进行代码整理

编写接口

@FeignClient(name="eureka-client-1")

public interface EurekaClient {

@GetMapping("/info")

String getInfo();

}

调用

@GetMapping("getMessage")

public String getMessage(){

String res = eurekaClient.getInfo();

return res;

}

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 {

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Eagle.js:使用Vue.js构建的幻灯片框架
下一篇:OSGi.NET- 基于 OSGi 规范的 C# 基础框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~