解决:com.netflix.client.ClientException: Load balancer does not have available server for client: XXX
问题背景:两个服务A和B,A使用Feign调用服务B的接口报错,显示B服务不可用,具体如下:
产生以上错误的原因是B服务没有被发现,解决上面的问题可以从3个方面入手排查:
排查一:
首先到注册中心列表查看服务是否存在,是否成功注册:
以上,服务已成功注册,若不存在需要在B服务的pom文件中添加以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
排查二:
在排除第一种情况外,还可能是因为服务启动顺序的原因影响:
服务A和B,A调用B(A->B)。
- 场景一:先启动了A,再启动了B。但是这时候,怎么都调用不到B。
- 场景二:先启动B,再启动A,这是可以正常调用。然后挂掉B,再重启。之后就怎么也调用不到B了。
如果要排除以上因素需要在B服务的application.properties的文件中添加以下配置:
ribbon.eureka.enable=true
排查三:
排除前两种原因,最后就是看下配置文件中定义的 服务名 是否正确了。
以上B服务的配置文件中应用名要和报错的服务名一致。