1. 程式人生 > 其它 >feign Load balancer does not have available server for client

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確實引入了)

第三步: 如果原本引入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