记录一个问题,
搭建Spring cloud 使用 feign 发现一个困扰了我一个小时的问题: feign Load balancer does not have available server for client
对于这个错误,网上相关帖子怎么说的都有,我只是记录一下我怎么解决,各位大神不喜勿喷
首先这个错误 (如果前面步骤,自己检查没问题,那么依次看下一个)
第一步,检查Eureka 服务列表 服务名字配置的是什么 (网上帖子,有说配置instance.appname/hostname的都是无效的)
spring:
application:
name: xxx
// 该注解不区分大小写 @FeignClient(name = "xxx/XXX")
第二步:检查是否引入 Ribbon(必须)
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.2.6.RELEASE</version> </dependency>
原本我引入的是Openfeign,我以为feign底层就是Ribbon就不需要额外引入(而且查看了Maven确实引入了)
第三步: 如果原本引入Eureka-client
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>3.0.0</version> </dependency>
请替换
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.5.RELEASE</version> </dependency>
通过上面几步就可以解决掉这个报错
另外延伸几点
第一: 网上有说可以使用
ribbon:
listOfServers: http://localhost:8081
上面这段配置,是给那些没有使用Eureka的项目 手动设置的ribbon请求地址。这样相当于给了一个很明确的地址,所以解决掉最开始说的这个错误是可以的(但是不根本)Eureka维护提供者/消费者列表,消费者可以去获得服务列表,如果是靠这种手动的配置去获取,那相当于失去了Eureka一个功能
第二: 有人说通过 如下配置,解决最开始的错误信息,首先这个配置自行百度是干嘛的,其次即使不设置这个值,默认就是true
eureka:
client:
register-with-eureka: true
fetch-registry: true