場景:
service-A服務透過 openFeign 遠端呼叫 service-B服務的test()方法,結果報錯
Load balancer does not contain an instance for the service service-B feign.FeignException$ServiceUnavailable: [503] during [POST] to [http://service-B/test]
原因:
報錯資訊的意思是找不到服務 service-B,feign的遠端服務沒有調通
排查方法:
1 看一下loadbalancer的依賴是否加了
從 Spring Cloud 2020.0 開始使用LoadBanlancer作為負載均衡,放棄了ribbon
所以在使用時pom依賴要加上 loadBanlancer的依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>3.1.6</version> </dependency>
2 看一下服務service-B啟動了沒有
沒啟動當然調不到了3 看一下注冊中心是否有服務service-B
看一下配置的註冊中心是否正確
4 A服務呼叫B服務,兩個服務的namespace和group是否一致
namespace和group的作用就是做環境隔離,所以兩個服務在不同的namespace和group是呼叫不通的
5 對比一下配置的服務名是否和feign中指定的名稱相同
服務名稱是否寫對了,注意大小寫都要對應
看一下 application.yml 中的配置
spring:
application:
name: service-B
service-A中指定的遠端呼叫服務名
@FeignClient("service-B")
如果在配置中指定了context-path
application.yml 中的配置
server:
servlet:
context-path: /test
service-A中指定的遠端呼叫服務名,需要加path引數
//注意這裡的path前面需要帶 / @FeignClient(value = "test", path = "/test")
6 檢查一下,如果使用了配置中心,還需要看看配置中心的配置是否正確
bootstrap.yml 中的配置會覆蓋 application.yml 存在的配置