Load balancer does not contain an instance for the service service-B [503] during [POST] 問題解決

欢跳的心發表於2024-07-18

場景:

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 存在的配置

相關文章