Feign Client for loadBalancing defined."/>
自学SpringCloudAlibaba踩坑:No Feign Client for loadBalancing defined.
这个问题首先是openfeign的版本问题导致的,网上有很多人都告诉你
需要排除spring-cloud-starter-alibaba-nacos-discovery中的ribbon。和添加spring-cloud-starter-loadbalancer依赖,然后在yml或者properties中添加配置
spring:application:name: nacos-consumercloud:loadbalancer:ribbon:enable: false
我这些坑都踩了,但是我还踩了一个坑,那就是版本管理,我不知道什么样的版本spring-cloud-starter-openfeign和spring-cloud-starter-alibaba-nacos-discovery会产生冲突,所以我就在maven官网上到处找版本乱配置
如(错误示范):
非常浪费时间,后面我想到了dependencyManagement 使用这个在不指定版本号的情况下,Maven 会自动从 spring-cloud-dependencies 中获取对应的版本号。
所以我的pom文件变成了这样
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns=".0.0"xmlns:xsi=""xsi:schemaLocation=".0.0 .0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.consumer</groupId><artifactId>consumer</artifactId><version>0.0.1-SNAPSHOT</version><name>ServiceConsumer</name><description>ServiceConsumer</description><properties><java.version>1.8</java.version></properties><dependencies><!-- spring boot web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--SpringCloud Alibaba nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><!-- 不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错--><exclusions><exclusion><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId><version>3.1.1</version></dependency></dependencies><dependencyManagement><dependencies><!-- Spring Cloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.1</version><type>pom</type><scope>import</scope></dependency><!-- Spring Cloud Alibaba --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.1.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
配合这个版本问题解决,然后我在去解决冲突的依赖,如:排除spring-cloud-starter-alibaba-nacos-discovery中的ribbon。和添加spring-cloud-starter-loadbalancer依赖,所以如果你这些都改好了,但是还是报错No Feign Client for loadBalancing defined.,你就需要反思自己是不是springCloud的版本管理出了问题
总结:约定大于配置,统一的版本管理是非常重要的。如果后续还是报了其他的错误,您可以自己指定组件的其他版本号来解决冲突
补充:
我在解决这个问题的时候在stackoverflow中看到,给@FeignClient(name = “XXX”)加url来解决这个问题,但给FeignClient注解加上url这个配置,就是指定了服务的地址,所以就不会加载负载均衡这个功能,自然就不会报错No Feign Client for loadBalancing defined.想要达到@FeignClient的负载均衡功能还是需要使用服务名访问
更多推荐
自学SpringCloudAlibaba踩坑:No Feign Client for loadBalancing defined.
发布评论