feign Load balancer does not have available server for client
阿新 • • 發佈:2021-10-15
記錄一個問題,
搭建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