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

没有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 关于#C语言#的问题,请各位专家解答!(语言-c语言)
  • ¥15 ImportError: DLL load failed while importing _iterative: 找不到指定的模块。
  • ¥15 如何通过交互分析得出某高危患者对放疗获益更多
  • ¥15 相关性分析中,p<0.05, r=0.29,怎么评价相关性呢
  • ¥15 docker部署Mongodb后输入命令报错?
  • ¥15 将下列流程图转变成python程序代码
  • ¥15 我需要全国每个城市的最新小区名字等数据。
  • ¥15 开发一个小区生态的小程序
  • ¥15 如何解决Excel中dependent dropdown list 的问题
  • ¥15 MddBootstrapInitialize2失败