• 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();//这里配置策略,和配置文件对应
        }

    再次启动服务,就行了

  • 相关阅读:
    【phpmailer】类Could not instantiate mail function / IXWebHosting空间
    Delphi通过机器码获得注册码的完整方案
    月末使用期间损益结转
    如何停用已启用模块
    DevExpress安装
    用Delphi实现WinSocket高级应用
    如何用delphi读取网卡物理号
    Delphi制作带图标的弹出式选单
    Register Delphi ,Delphi 不能运行
    远程通:系统管理不可以使用
  • 原文地址:https://www.cnblogs.com/bigbigxiao/p/12115212.html
Copyright © 2020-2023  润新知