Spring cloud 升级到spring cloud starter netflix Eureka客户端后,Eureka Ribbon客户端不工作:jar:2.2.7.RELEASE
因此,我们将SpringCloudNetflix库从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
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与springspring 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已经被弃用了,这是正确的