SpringCloud集成Eureka,使用Rbbion、RestTemplate自定义负载均衡策略【踩坑】

文章讲述了在使用SpringCloudHoxton.SR9版本和SpringBoot2.2.5.RELEASE时,尝试自定义负载均衡策略时遇到的问题,即在引入spring-cloud-starter-netflix-ribbon依赖后,虽然Eureka上服务实例健康但无法找到。问题解决办法是将Eureka版本降级到2.1.2.RELEASE并移除手动引入的ribbon依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例使用环境如下

       SpringCloud  Hoxton.SR9

       SpringBoot 2.2.5.RELEASE

        jdk8

        SpringCloud集成eureka的pom版本是4.1.1

        

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>4.1.1</version>
        </dependency>

自定义负载均衡策略为随机模式代码

@Configuration
public class MySelfRule {

    @Bean
    public IRule myRule(){
        return new RandomRule(); // 定义机制
    }
}

        当编写这个类的时候,发现 IRule、RandomRule这个两个类引入不进来,于是pom文件增加依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>

之后两个类引入进来了之后,主启动类上增加注解

@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)

CLOUD-PAYMENT-SERVICE:是调用的提供者服务实例名称

启动项目访问出现以下错误

java.lang.IllegalStateException: No instances available for CLOUD-PAYMENT-SERVICE
	at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:119) ~[spring-cloud-netflix-ribbon-2.2.6.RELEASE.jar:2.2.6.RELEASE]
	at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:99) ~[spring-cloud-netflix-ribbon-2.2.6.RELEASE.jar:2.2.6.RELEASE]
	at org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor.intercept(LoadBalancerInterceptor.java:58) ~[spring-cloud-commons-2.2.6.RELEASE.jar:2.2.6.RELEASE]
	at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93) ~[spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:77) ~[spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE]

但是我的提供者服务实例明明在Eureka上是跑着的,并且是健康的状态,怎么会找不到呢?

于是开始排查错误,最后发现 使用的Eureka版本为4.1.1  ,  如果手动引入了 spring-cloud-starter-netflix-ribbon这个依赖,使用默认的负载均衡规则,也是找不到服务实例的,最后无奈只能降低了 Eureka的版本为 2.1.2.RELEASE,删除 手动引入的spring-cloud-starter-netflix-ribbon,就可以调用成功了。我也不知道什么原因,为什么手动引入这个依赖就不行了

如果你也遇到这个问题,就降低版本吧

解决方案

        降低Eureka的版本从 4.1.1   -----> 2.1.2.RELEASE

有大佬知道的么。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值