java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Feign调用@FeignClient 找不到

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

作者:人在旅途我渐行渐远

这篇文章主要介绍了通过Feign进行调用@FeignClient 找不到的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Feign进行调用@FeignClient 找不到

通过Feign 进行调用

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

 <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.M8</spring-cloud.version>
    </properties>

引入依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.0.0.RC1</version>
        </dependency>

注意: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通过服务名调用服务,找不到服务

报错环境

报错时,注册中心的情况

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问题,导致本地服务无法通过服务名字找到相应的服务。

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 {

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文