• Spring Cloud Ribbon实现客户端负载均衡


    1、构建microservice-consumer-movie-ribbon项目,在pom.xml中引入ribbon依赖

      在引入Eureka依赖的时候,默认里面含有ribbon依赖

    2、添加@LoadBalanced注解,实现负载均衡

      ribbon负载均衡策略默认为轮循方式

    @SpringBootApplication
    @EnableEurekaClientpublic class ConsumeMovieRibbonApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConsumeMovieRibbonApplication.class, args);
        }
        @Bean
        @LoadBalanced  //客户端负载均衡
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }

    3、自定义负载均衡策略

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import com.netflix.loadbalancer.IRule;
    import com.netflix.loadbalancer.RandomRule;
    /**
     * @Configuration注解不能放在@SpringBootApplication所在的包下
    * 如果放在此包下,默认全部负载均衡使用此策略 *
    */ @Configuration @ExcludeFromComponentScan public class TestConfiguration { /** * 设置负载均衡的规则为随机 * */ @Bean public IRule ribbonRule() { return new RandomRule(); } }

    4、指定对那个客户端使用自定义负载均衡

    @SpringBootApplication
    @EnableEurekaClient
    @RibbonClient(name = "microservice-provider-user", configuration = TestConfiguration.class)
    public class ConsumeMovieRibbonApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConsumeMovieRibbonApplication.class, args);
        }
        @Bean
        @LoadBalanced  //客户端负载均衡
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }

    5、如果@Configuration注解放在@SpringBootApplication所在的包下

      a、在@Configuration包下创建ExcludeFromComponentScan注解

    package com.wyl.microservicesimpleconsumemovie;
    public @interface ExcludeFromComponentScan {
    }

      b、在入口类中排除此注解不扫描

    package com.wyl.microservicesimpleconsumemovie;
    
    @SpringBootApplication @EnableEurekaClient @RibbonClient(name = "microservice-provider-user", configuration = TestConfiguration.class) @ComponentScan(excludeFilters = {@ComponentScan.Filter(type=FilterType.ANNOTATION,value=ExcludeFromComponentScan.class)}) public class ConsumeMovieRibbonApplication {   ... }

      c、在TestConfiguration中使用此注解

    /**
     * @Configuration注解不能放在@SpringBootApplication所在的包及其子包下
     * */
    @Configuration
    @ExcludeFromComponentScan
    public class TestConfiguration {
        /**
         * 设置负载均衡的规则为随机
         * */
        @Bean
        public IRule ribbonRule() {
            return new RandomRule();
        }
    }

    6、开启多个microservice-provider-user微服务,测试结果

        

    负载均衡的结果:

    111:microservice-provider-user:192.168.1.39:7900
    222:microservice-provider-user2:192.168.1.39:7903
    111:microservice-provider-user:192.168.1.39:7900
    222:microservice-provider-user2:192.168.1.39:7902
    111:microservice-provider-user:192.168.1.39:7901
    222:microservice-provider-user2:192.168.1.39:7903
    111:microservice-provider-user:192.168.1.39:7900
    222:microservice-provider-user2:192.168.1.39:7902
    111:microservice-provider-user:192.168.1.39:7901
    222:microservice-provider-user2:192.168.1.39:7903
    111:microservice-provider-user:192.168.1.39:7901
    222:microservice-provider-user2:192.168.1.39:7902
    111:microservice-provider-user:192.168.1.39:7900
    222:microservice-provider-user2:192.168.1.39:7903
    111:microservice-provider-user:192.168.1.39:7900
    222:microservice-provider-user2:192.168.1.39:7902
    microservice-provider-user采用自定义的随机负载均衡,而microservice-provider-user2采用ribbon默认的轮循方式
    6、完整代码参见https://i.cnblogs.com/Files.aspx中microservice-spring-cloud-ribbon文件
  • 相关阅读:
    两数之和
    输入一个int型数据,计算出该int型数据在内存中存储时1的个数。
    MySQL事务机制(Transaction)
    JAVA 之 深入理解String类
    MySQL 之 SQL练习
    python常用函数及循环
    python多版本配置pyenv
    ES6语法的简单示例
    学习笔记190—利用matlab求解方程组的解
    学习笔记189—pandas 获取Dataframe元素值的几种方法
  • 原文地址:https://www.cnblogs.com/studyDetail/p/7080985.html
Copyright © 2020-2023  润新知