Spring cloud 升级到spring cloud starter netflix Eureka客户端后,Eureka Ribbon客户端不工作:jar:2.2.7.RELEASE

Spring cloud 升级到spring cloud starter netflix Eureka客户端后,Eureka Ribbon客户端不工作:jar:2.2.7.RELEASE,spring-cloud,spring-cloud-netflix,Spring Cloud,Spring Cloud Netflix,因此,我们将SpringCloudNetflix库从2.2.2.RELEASE升级到2.2.7.RELEASE。我没料到会有大的打嗝,但经过测试,我一直看到这个错误 Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: dummy-service at com.netflix.loadbalancer.LoadBalancerContext.g

因此,我们将SpringCloudNetflix库从
2.2.2.RELEASE
升级到
2.2.7.RELEASE
。我没料到会有大的打嗝,但经过测试,我一直看到这个错误

Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: dummy-service
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]
我们还将Netflix Zuul与spring
spring cloud starter一起使用Netflix Zuul:2.2.7.RELEASE

在进一步调试后,我发现
DynamicServerListLoadBalancer
中的
ServerList
属性的实现实际上是
ConfigurationBasedServerList
,而不是
DomainExtractingServerList
(应该是包装
DiscoveryEnabledNIWSServerList
)。这一观察结果也与spring cloud文档中的预期行为相矛盾

当Eureka与Ribbon一起使用时(即,两者都在类路径上),ribbonServerList将被DiscoveryEnabledNIWSServerList的扩展覆盖,该扩展将填充Eureka中的服务器列表。它还用NIWSDiscoveryPing替换了IPing接口,NIWSDiscoveryPing委托给Eureka来确定服务器是否已启动。默认情况下安装的服务器列表是DomainExtractionServerList

我还注意到我的
springcloudstarter-netflix-eureka客户端:jar:2.2.7.RELEASE
正在下载
springcloudnetflix-eureka客户端:jar:3.0.2
,它没有
EurekaRibbonClientConfiguration
DomainExtractingServerList
这是故意的吗?

+-org.springframework.cloud:springcloudstarter netflix eureka客户端:jar:2.2.7.发布:编译
[信息]|+-org.springframework.cloud:springcloudnetflix hystrix:jar:2.2.7.发布:编译
[INFO]|+-org.springframework.cloud:springcloud-netflix-eureka客户端:jar:3.0.2:compile
我本来希望2.x能与3.x一起工作,因为库是通过传递的方式被拉入的,但这在这里并没有发生。 顺便说一句,我还尝试在pom文件中添加
SpringCloudNetflix eureka客户端:jar:2.2.7.RELEASE
inline以覆盖3.0.2,但随后遇到一些类定义未找到的错误

在这种情况下有什么建议?我是否应该在应用程序中创建
EurekaRibbonClientConfiguration
,以便获得正确的
ServerList
EurekaRibbonClientConfiguration
似乎不仅仅是创建一个
ServerList
bean实现。 我不能使用
3.0.2
,因为我也在使用Zuul,而Spring cloud Zuul的最大值为

我真的需要继续使用SpringCloud、Zuul、Ribbon和Eureka

更新这是我的pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>

    <groupId>com.cdm</groupId>
    <artifactId>api-internal-gateway</artifactId>
    <version>${default.version}</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <default.version>DEV-SNAPSHOT</default.version>
        <java.version>11</java.version>     
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-cloud.version>2020.0.2</spring-cloud.version>
        <springfox.version>2.9.2</springfox.version>
        <spring-cloud.extras.version>2.2.7.RELEASE</spring-cloud.extras.version>
    </properties>

  
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
            <version>${spring-cloud.extras.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>${spring-cloud.extras.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            <version>${spring-cloud.extras.version}</version>
        </dependency>


        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>2.0.2-beta</version>
            <scope>test</scope>
        </dependency>
        
        <!-- API -->
        <dependency>
          <groupId>jakarta.xml.ws</groupId>
          <artifactId>jakarta.xml.ws-api</artifactId>
          <version>2.3.2</version>
        </dependency>
        <!-- Runtime -->
        <dependency>
          <groupId>com.sun.xml.ws</groupId>
          <artifactId>jaxws-rt</artifactId>
          <version>2.3.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
            <version>3.0.2</version>
        </dependency>
        <dependency>
            <groupId>javax.transaction</groupId>
            <artifactId>javax.transaction-api</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

</project>

4.0.0
com.cdm
api内部网关
${default.version}
org.springframework.boot
spring启动程序父级
2.4.4
DEV-SNAPSHOT
11
UTF-8
UTF-8
2020.0.2
2.9.2
2.2.7.发布
org.springframework.cloud
spring云依赖关系
${spring cloud.version}
聚甲醛
进口
org.springframework.boot
弹簧靴
org.projectlombok
龙目
org.springframework.boot
弹簧靴起动器执行器
org.springframework.boot
SpringBootStarterWeb
org.springframework.cloud
斯普林云侦探
${spring cloud.extras.version}
org.springframework.cloud
spring cloud starter netflix eureka客户端
${spring cloud.extras.version}
org.springframework.cloud
春季云入门netflix zuul
${spring cloud.extras.version}
org.mockito
莫基托磁芯
测试
org.junit.jupiter
朱尼特朱庇特
测试
org.mockito
莫基托所有
2.0.2-beta
测试
jakarta.xml.ws
jakarta.xml.ws-api
2.3.2
com.sun.xml.ws
jaxws-rt
2.3.2
javax.xml.bind
jaxb api
2.3.1
javax.annotation
javax.annotation-api
1.3.1
com.google.code.findbugs
jsr305
3.0.2
javax.transaction
javax.transaction-api
1.2

有些东西把依赖项搞乱了。2.x和3.x不能一起工作。你能展示一下你的pom.xml吗?SpringCloud的2.x版本不适用于Boot2.4.x。感谢Spencer的回复!我在问题中添加了我的pom文件,可以确认我正在使用spring boot 2.4.x进行尝试。正如我所怀疑的,2020.0.x和Netflix 2.x的混合不受支持,也不会工作。因此,Netflix 2.x无法与Cloud 2020.0.x一起工作,spring Cloud Zuul也没有3.x。这是否意味着如果我们想继续升级SpringCloud,我唯一的选择就是摆脱Zuul并采用SpringCloudGateway?我不介意,因为Zuul 1已经被弃用了,这是正确的