springcloud 之Ribbon客户端负载均衡配置使用

  1. pom.xml添加配置
    说明:这里服务注册与发现用的是Eureka,所以消费者端需要引入eureka,使用EurekaClient来调用服务

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>            
  2. 修改application.yml 添加eureka的服务注册地址,如下图:
    说明:下图中的 service-url配置的是3个eureka集群服务地址
  3. ConfigBean代码
    说明:主要代码,获取RestTemplate时,添加@LoadBalanced注解实现客户端负载均衡

    package com.thr.springcloud.cfgbean;
    
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    import com.netflix.loadbalancer.IRule;
    import com.netflix.loadbalancer.RandomRule;
    
    /**
     * 注解@Configuration说明:相当于spring的applicationContext.xml
     * 即此时加了@Configuration注解的CfgBean类 等同于 applicationContext.xml
     * @author xiongxiaomeng
     */
    @Configuration
    public class CfgBean {
    
        /**
         * 使用RestTemplate调用Rest服务
         * @LoadBalanced 获取RestTemplate时,加入Ribbon的负载均衡的配置
         * @return Rest服务调用模板
         */
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate()
        {
             return new RestTemplate();
        }
    
        /**
         * 定义负载均衡算法:
         * 默认:轮询,当前改成:随机
         * @return 随机算法
         */
        @Bean
        public IRule myRule() {
            return new RandomRule();
        }
    
    }

  4. 主启动类添加EurekaClient配置:
  5. 客户端访问类 UserController_Consumer.java

    package com.thr.springcloud.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    import com.thr.springcloud.entities.User;
    
    /**
     * 消费者端的RestController
     * 消费者端 都是 调用服务提供者的Controller,这里使用RestTemplate的方式调用
     * @author xiongxiaomeng
     *
     */
    @RestController
    public class UserController_Consumer {
    
        //未加入Eureka+Ribbon之前,采用ip+端口的访问方式
        //private static final String REST_URL_PREFIX = "http://localhost:8001";
        //加入Eureka+Ribbon之后,可以直接采用服务名的调用方式,无须再使用ip+端口的调用方式
        private static final String REST_URL_PREFIX = "http://THRCLOUD-DEPT";
    
        //使用restTemplate访问restful接口非常的简单粗暴无脑。(url, requestMap, ResponseBean.class)这三个参数分别代表
        @Autowired
        private RestTemplate _restTemplate;
    
        @RequestMapping(value="/consumer/user/add")
        public boolean add(User user) {
            return _restTemplate.postForObject(REST_URL_PREFIX + "/user/add", user, Boolean.class);
        }
    
        @RequestMapping(value="/consumer/user/get/{userId}")
        public User get(@PathVariable("userId") Long userId) {
            return _restTemplate.getForObject(REST_URL_PREFIX + "/user/get/" + userId, User.class);
        }
    
        @SuppressWarnings("unchecked")
        @RequestMapping(value="/consumer/user/list")
        public List<User> list() {
            return _restTemplate.getForObject(REST_URL_PREFIX + "/user/list", List.class);
        }
    
        @RequestMapping(value="/consumer/user/discovery")
        public Object discovery() {
            return _restTemplate.getForObject(REST_URL_PREFIX + "/user/discovery", Object.class);
        }
    }

原文地址:https://www.cnblogs.com/smartbear/p/11706580.html

时间: 2024-11-08 23:54:23

springcloud 之Ribbon客户端负载均衡配置使用的相关文章

笔记:Spring Cloud Ribbon 客户端负载均衡

Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服务的REST 模板请求自动转换为客户端负载均衡的服务调用.客户端负载均衡在系统架构中是一个非常重要的,并且是不得不去实施的内容,因为负载均衡是对系统的高可用.网络压力的缓解和处理能力扩容的重要手段,客户端负载均衡需要通过心跳去维护服务端清单的健康性,这个需要服务注册中心配合完成,在Spring Cl

SpringCloud(六)Ribbon的负载均衡(一)

Ribbon 何为负载均衡? 负载均衡在系统架构中是一个非常重要,并且是不得不去实施的内容.因为负载均衡是对系统的高可用.网络压力的缓解和处理能力扩容的重要手段之一.我们通常所说的负载均衡都指的是服务端负载均衡,其中分为硬件负载均衡和软件负载均衡.硬件负载均衡主要通过在服务器节点之间按照专门用于负载均衡的设备,比如F5等:而软件负载均衡则是通过在服务器上安装一些用于负载均衡功能或模块等软件来完成请求分发工作,比如Nginx等.不论采用硬件负载均衡还是软件负载均衡,只要是服务端都能以类似下图的架构

Spring Cloud Ribbon——客户端负载均衡

一.负载均衡负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. 1.服务端负载均衡:客户端请求到负载均衡服务器,负载均衡服务器根据自身的算法将该请求转给某台真正提供业务的服务器,该服务器将响应数据给负载均衡服务器,负载均衡服务器最后

spring cloud ribbon 客户端负载均衡策略

负载均衡策略 AbstractLoadBalancerRule 负载均衡策略的抽象类,在该类中定义了负载均衡器ILoadBalancer对象,该对象能够在具体实现选择服务策略时,获取到 一些负载均衡中维护的信息来作为分配依据,并以此设计一些算法来实现针对特定场景的高效策略 RandomRule 随机选择一个服务实例 RoundRobinRule 线性轮询的方式 RetryRule 实现了一个具备重试机制的实例选择功能 WeightedResponseTimeRule 该策略是对RoundRobi

spring cloud 使用ribbon简单处理客户端负载均衡

假如我们的multiple服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端口8762修改为8763.然后启动这两个Spring Boot应用, 就可以得到两个Hello World服务.这两个Hello world都注册到了eureka服务中心.这时候再访问http://localhost:8761, 可以看到两个multiple服务已经注册 1.  客户端的负载均衡 负载均衡可分为服

SpringCloud开发学习总结(四)—— 客户端负载均衡Ribbon

通过上一章<SpringCloud开发学习总结(三)-- 服务治理Eureka>,我们已经搭建起微服务架构中的核心组件--服务注册中心(包括单点模式和高可用模式).同时还注册了一个服务,命名为hello-service.现在我们已经有了服务注册中心和服务提供者,下面就来尝试构建一个服务消费者,它主要完成两个目标,发现服务以及消费服务.其中,服务发现的任务由Eureka的客户端完成,而服务消费的任务由Ribbon完成.Ribbon是一个基于HTTP和TCP的客户端负载均衡器,它可以在通过客户端中

SpringCloud之Ribbon负载均衡配置

一.负载均衡解决方案分类及特征 业界主流的负载均衡解决方案有: 1.1 集中式负载均衡 即在客户端和服务端之间使用独立的负载均衡设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务端. 1.2 进程内负载均衡 将负载均衡逻辑集成到客户端组件中,客户端组件从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务端发起请求.Ribbon就是一个进程内的负载均衡实现. 二.Ribbon常用负载均衡策略 Ribbon就属于进程内负载

客户端负载均衡Ribbon之二:Loadbalance的几种算法以及在ribbon中的使用

Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 像nginx可以使用负载均衡分配流量,ribbon为客户端提供负载均衡,dubbo服务调用里的负载均衡等等,很多地方都使用到了负载均衡. 使用负载均衡带来的好处很明显: 当集群里的1台或者多台服务器down的时候,剩余的没有down的服务器可以保证服务的继续使用 使用了更多的机器保证了机器的良性使用,不会由于某一高峰时刻导致系统cpu急剧上升 负载均衡有好几种实现策略,常见的有: 随机 (Rando

客户端负载均衡Ribbon之源码解析

什么是负载均衡器? 假设有一个分布式系统,该系统由在不同计算机上运行的许多服务组成.但是,当用户数量很大时,通常会为服务创建多个副本.每个副本都在另一台计算机上运行.此时,出现 "Load Balancer(负载均衡器)".它有助于在服务器之间平均分配传入流量. 服务器端负载均衡器 传统上,Load Balancers(例如Nginx.F5)是放置在服务器端的组件.当请求来自 客户端 时,它们将转到负载均衡器,负载均衡器将为请求指定 服务器.负载均衡器使用的最简单的算法是随机指定.在这