我认不到你 2022-05-15 15:01 采纳率: 100%
浏览 726
已结题

没有IRule接口咋办啊 加Ribbon依赖会报错的 eureka3.0以上版本包括了Ribbon 但没有Ribbon依赖就没有IRule接口啊

问题遇到的现象和发生背景

没有IRule接口咋办啊 加Ribbon依赖会报错的 eureka3.0以上版本包括了Ribbon 但没有Ribbon依赖就没有IRule接口啊

问题相关代码,请勿粘贴截图
    //配置负载均衡实现RestTemplate
    //负载均衡有个核心的实现 IRule(路由网关)
    // RoundRobinRule : 轮询 (默认的就是轮询)
    // RandomRule : 随机
    // AvailabilityFilteringRule : 会先过滤掉 跳闸、访问故障的服务,对剩下的进行轮询
    // RetryRule : 会先按照轮询获取服务,如果服务获取失败,则会在指定的时间内重试
    @Bean
    @LoadBalanced //Ribbon
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

    @Bean
    public IRule myRule(){

    }
        <!--Ribbon-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>-->
<!--            <version>2.2.10.RELEASE</version>-->
<!--        </dependency>-->

        <!--加入eureka依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
运行结果及报错内容

就是没有找到IRule接口,因为没导Ribbon依赖,但eureka3.0以上版本包括了Ribbon,再导入Ribbon依赖运行后连接其他服务会报错

我的解答思路和尝试过的方法

eureka3.0以上版本包括了Ribbon 但没有Ribbon依赖就没有IRule接口 加入了Ribbon依赖IRule接口才出来,但运行后连接其他服务会报错

我想要达到的结果

用IRule接口自定义Ribbon负载均衡

  • 写回答

3条回答 默认 最新

  • 我认不到你 2022-05-17 14:53
    关注

    如果在使用自定义负载均衡时报错,大概率是因为版本问题。springcloud在2020.0.0之后,移除掉了netflix-ribbon 使用eureka-client中的loadbalancer,使用自定义负载均衡不使用IRule接口。官方文档上有写,可以写一个配置类,可以与启动类同级

    public class CustomerLoadBalancerConfiguration {
        @Bean 
        ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                                LoadBalancerClientFactory loadBalancerClientFactory) {
            String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
    
            return new RandomLoadBalancer(loadBalancerClientFactory
                    .getLazyProvider(name, ServiceInstanceListSupplier.class),
                    name);
        }
    }
    

    然后在注入resttemplate的类中,使用注解@LoadBalancerClient
    @LoadBalancerClient(name = "这里写提供者名称",configuration = CustomerLoadBalancerConfiguration.class)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月25日
  • 已采纳回答 5月17日
  • 创建了问题 5月15日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器