zoukankan      html  css  js  c++  java
  • Spring Cloid Ribbon服务的通信与负载均衡搭建

    Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。
    通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

    spring cloud ribbon 主要是对有集群的服务,进行选择访问。

      ribbon的访问机制有很多不多说,只说3个

        轮询 (RoundRobin):按照顺序访问集群中的服务。

        随机(Random):随机的访问集群中的服务。

        加权(Weighted):服务访问时间越长,它的权重值越小(权重值:就是个普通的值1,2,3,4,5这些值而已),权重值越小访问的几率越低。

    Spring Cloud Ribbon的使用 

    举个栗子:我有一个orders-server服务,和一个user-server-3000服务,user-server-3000服务做了集群user-server-3001

          orders-server服务要访问user-server服务。这时就需要Ribbon来实现权重均衡。轮询user-server-3000和user-server-3001服务

    1.在orders-server导依赖

     <!--客户端负载均衡实现 ribbon-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>

    2.在orders-server配置类中添加代码

    /**
         * @LoadBalanced给RestTemplate添加负载均衡的功能默认是轮询机制
       *
       * RestTemplate 提供了多种便捷访问远程Http服务的方法 *
    @return */ @LoadBalanced @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); }

    3.在Controller层的通行方法中把地址和端口号改为user-server集群的服务的名字。(user-server-3000和user-server-3001是集群,服务名字是一样的啊

    //注入远程Http服务的方法
    @Autowired
    private RestTemplate restTemplate;
    /**
         * 该方法是浏览器来调用
         *
         * @HystrixCommand:
         *
         * @param id
         * @return
         */
        @GetMapping("/order/user/{id}")
        public User getUserById(@PathVariable("id") Long id){
            System.out.println("OrderConsumerController.getUserById被调用了......");
    
            // String url = "http://http://localhost:3001/user/"+id;
            String url = "http://user-server/user/"+id;
            
            //url 访问地址;User.class:返回的数据类型
            User user = restTemplate.getForObject(url, User.class);
            return user;
        }

    启动服务调用orders-server就行了。

    修改负载均衡的机制:

    如果要把轮询机制改成随机机制

    在orders-server配置类中添加代码

    /**
         * @LoadBalanced给RestTemplate添加负载均衡的功能
         *
         * RestTemplate 提供了多种便捷访问远程Http服务的方法
         * @return
         */
        @LoadBalanced
        @Bean
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    
    
        @Bean
        public IRule ribbonRule() {
            return new RandomRule();//这里配置策略,和配置文件对应
        }

    再次启动服务,就行了

  • 相关阅读:
    kotlin中值范围
    kotlin中集合
    kotlin数据解构
    Java 8 Lambda 表达式
    kotlin 之内联函数
    kotlin之函数的范围和泛型函数
    kotlin函数的参数和返回值
    kotlin 之单表达式函数
    kotlin使用中辍标记法调用函数
    kotlin之函数的基本用法
  • 原文地址:https://www.cnblogs.com/bigbigxiao/p/12115212.html
Copyright © 2011-2022 走看看