自学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-consumer
  cloud:
    loadbalancer:
      ribbon:
        enable: false

我这些坑都踩了,但是我还踩了一个坑,那就是版本管理,我不知道什么样的版本spring-cloud-starter-openfeign和spring-cloud-starter-alibaba-nacos-discovery会产生冲突,所以我就在maven官网上到处找版本乱配置
如(错误示范):
在这里插入图片描述
自学SpringCloudAlibaba踩坑:No Feign Client for loadBalancing defined._第1张图片

非常浪费时间,后面我想到了dependencyManagement 使用这个在不指定版本号的情况下,Maven 会自动从 spring-cloud-dependencies 中获取对应的版本号。
所以我的pom文件变成了这样


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.6.3version>
        <relativePath/> 

    parent>
    <groupId>com.consumergroupId>
    <artifactId>consumerartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>ServiceConsumername>
    <description>ServiceConsumerdescription>
    <properties>
        <java.version>1.8java.version>
    properties>
    <dependencies>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        dependency>
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.cloudgroupId>
                    <artifactId>spring-cloud-starter-netflix-ribbonartifactId>
                exclusion>
            exclusions>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-loadbalancerartifactId>
            <version>3.1.1version>
        dependency>

    dependencies>
    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>2021.0.1version>
                <type>pomtype>
                <scope>importscope>
            dependency>

            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>2021.0.1.0version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            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的负载均衡功能还是需要使用服务名访问

你可能感兴趣的:(spring,cloud)