com.netflix.client.ClientException: Load balancer does not have available server for client:XXX

今天在使用SpringCloud-Feign编写consumer的时候遇到的一个坑
具体配置如下:

  • 依赖
<!--feign相关依赖包-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
    <version>1.4.4.RELEASE</version>
</dependency>

<!--eureka客户端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • yml配置
server:
 port: 9002
#eureka相关配置
eureka:
 client:
   service-url:
     #指定eureka地址
     defaultZone: http://localhost:9003/eureka/
   #需要向eureka服务注册自己
   register-with-eureka: false
   #不需要获取服务的注册列表
   fetch-registry: true
  • 接口编写
@Component
@FeignClient(name = "USERAPI")
public interface UserService {

项目启动正常,但是在访问consumer调用接口时出现了如下问题:

com.netflix.client.ClientException: Load balancer does not have available server for client: USERAPI
	at com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:483) ~[ribbon-loadbalancer-2.3.0.jar:2.3.0]
	at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:184) ~[ribbon-loadbalancer-2.3.0.jar:2.3.0]
	at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.3.0.jar:2.3.0]

网上说这是feign的负载均衡问题,需要对Ribbon进行配置,试了以后发现没有用,而且我此处只是一个简单的Feign的应用,并没有使用到Ribbon,经过测试,最后发现问题出现在@FeignClient注解的值上。
在配置provider向eureka注册服务时,我们都知道eureka中的Application名称配置有两种配置方式,方式如下:

#eureka相关配置
eureka:
  instance:
    # 注册到eureka中的微服务的名字
    appname: userapi

spring:
  application:
    # 配置SpringWeb application 的名字,
    # 当euraka.instance.appname 未设置时,使用此值注册到eureka server
    name: api

此处配置了Spring的项目名称和eureka中的微服务名称
按照正常逻辑,feign在eureka中寻找项目时应该是从Application名称中寻找,
但实际不是,Feign找的是我们配置的Spring项目的名称,
如果provide中不去配置spring.application.nameFeign依然找不到我们需要的项目,
所以此处我们应当将@FeignClient注解中的值改为spring.application.name定义的值,而不是eureka的appname名称。
修改如下:

@Component
@FeignClient(name = "API")
public interface UserService {

修改之后,运行就没有问题了,至于为什么要配置Spring的application名称而不是eureka中的注册名称,还有待研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值