场景:
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-Bservice-A中指定的远程调用服务名
@FeignClient("service-B")
如果在配置中指定了context-path
application.yml 中的配置
server: servlet: context-path: /testservice-A中指定的远程调用服务名,需要加path参数
//注意这里的path前面需要带 / @FeignClient(value = "test", path = "/test")