feign Load balancer does not have available server for client

记录一个问题,

搭建Spring cloud 使用 feign 发现一个困扰了我一个小时的问题: feign Load balancer does not have available server for client 

对于这个错误,网上相关帖子怎么说的都有,我只是记录一下我怎么解决,各位大神不喜勿喷

首先这个错误 (如果前面步骤,自己检查没问题,那么依次看下一个)

第一步,检查Eureka 服务列表 服务名字配置的是什么 (网上帖子,有说配置instance.appname/hostname的都是无效的)

spring:
  application:
    name: xxx
// 该注解不区分大小写
@FeignClient(name = "xxx/XXX")

第二步:检查是否引入 Ribbon(必须)

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

原本我引入的是Openfeign,我以为feign底层就是Ribbon就不需要额外引入(而且查看了Maven确实引入了)

feign Load balancer does not have available server for client

 

 第三步: 如果原本引入Eureka-client 

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

请替换

        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.5.RELEASE</version>
        </dependency>

 

通过上面几步就可以解决掉这个报错

另外延伸几点

第一: 网上有说可以使用

  ribbon:
    listOfServers: http://localhost:8081

上面这段配置,是给那些没有使用Eureka的项目 手动设置的ribbon请求地址。这样相当于给了一个很明确的地址,所以解决掉最开始说的这个错误是可以的(但是不根本)Eureka维护提供者/消费者列表,消费者可以去获得服务列表,如果是靠这种手动的配置去获取,那相当于失去了Eureka一个功能

第二: 有人说通过 如下配置,解决最开始的错误信息,首先这个配置自行百度是干嘛的,其次即使不设置这个值,默认就是true

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true

 

上一篇:SpringCloud搭建


下一篇:今日头条一面:十道经典面试题解析