Ribbon概述

SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具。

简单的说, Ribbon是Netflix发布的开源项目, 主要功能是提供客户端软件的负载均衡算法, 将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项, 如:连接超时, 重试等。就是在配置文件中列出Load Balancer(简称LB)后面所有的机器, Ribbon会自动的帮助你基于某种规则(如简单的轮询,随机连接等)去连接这些机器, 我们也很容易使用Ribbon实现自定义的负载均衡算法。

负载均衡分为:集中式负载均衡和进程内负载均衡。

  • 集中式负载均衡: 在服务的消费方和提供方之间使用独立的负载均衡设施(可以是硬件: 如F5, 也可以是软件: 如Nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方。
  • 进程内负载均衡: 将负载均衡逻辑集成到服务消费端, 消费端从服务注册中心获取有哪些地址可用, 然后再从这些地址中选出合适的服务器。

Ribbon就属于进程内负载均衡, 它只是一个类库, 集成于消费端进程中, 消费放通过它获取到服务提供方的地址。

搭建Ribbon负载均衡

因为Ribbon是客户端负载均衡工具, 所以我们要在消费端搭建Ribbon环境, 即在microservicecloudconsumerdept80工程中搭建。

修改microservicecloudconsumerdept80:

application.xml

修改配置Bean文件:ConfigBean.java添加@LoadBalanced注解, 以方便的实现Ribbon的负载均衡

修改启动类:

为了更符合微服务的调用方式, 我们将访问host+port方式修改为用微服务名称访问:

测试: 启动顺序, 服务注册中心必须优先启动。在浏览器中输入http://localhost/consumer/dept/get/1出现下列页面即成功。

架构说明

搭建服务提供者集群

创建microservicecloudproviderdept8002, microservicecloudproviderdept8003将microservicecloudproviderdept8001中的源码粘贴到此两个module中。

修改microservicecloudproviderdept8002

pom.xml: 将dependencies 标签中的所有依赖全部拷贝到pom文件中

application.yml: 修改端口号, 修改微服务实例id, 修改数据库

修改启动类:

测试: 先启动注册中心, 再启用服务提供者, 最后启动服务消费者

此三个库数据轮流出现, 说明测试成功!

总结: Ribbon其实就是一个软负载的客户端组件, 它可以和其他所需请求的客户端结合使用, 和Eureka结合只是其中的一个实例。

Ribbon核心组件IRule

IRule根据特定算法从服务列表中选取一个要访问的服务。默认算法是轮询。

源码结构

修改默认算法

在消费端ConfigBean.java中添加下面的方法

Ribbon自定义

官方文档给出明确警告: 这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下, 否则我们自定义的这个配置类就会被所有Ribbon客户端所共享, 也就是说达不到特殊化定制的目的了。

意思就是, 不允许和启动类在同一个包以及子包下。

此自定义负载均衡算法是根据轮训改编, 当一台服务被调用5次之后再调用下一台服务。

在启动类添加@RibbonClient注解

GitHub源码

https://github.com/wcd19901010/microservicecloud

SpringCloud学习(4)——Ribbon负载均衡的更多相关文章

  1. 最适合新手入门的SpringCloud教程 6—Ribbon负载均衡「F版本」

    SpringCloud版本:Finchley.SR2 SpringBoot版本:2.0.3.RELEASE 源码地址:https://gitee.com/bingqilinpeishenme/Java ...

  2. SpringCloud学习笔记:负载均衡Ribbon(3)

    1. RestTemplate简介 RestTemplate是Spring Resource中一个访问第三方RESTful API接口的网络请求框架. RestTemplate是用来消费REST服务的 ...

  3. SpringCloud学习(5)——Feign负载均衡

    Feign概述 Feign是声明式的Web服务客户端, 使得编写Web服务客户端变的非常容易, 只需要创建一个接口, 然后在上面添加注解即可. Feign旨在使编写Java Http客户端变的更容易. ...

  4. 008 SpringCloud 学习笔记4-----Ribbon负载均衡

    1.Ribbon概述 实际环境中,我们往往会开启很多个itcast-service-provider的集群.此时我们获取的服务列表中就会有多个,到底该访问哪一个呢? Eureka中已经帮我们集成了负载 ...

  5. SpringCloud学习笔记(2):使用Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...

  6. SpringCloud的入门学习之概念理解、Ribbon负载均衡入门

    1.Ribbon负载均衡,Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端.负载均衡的工具. 答:简单的说,Ribbon是Netflix发布的开源项目,主要功能 ...

  7. SpringCloud学习笔记(五):Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均衡的工具 .(重点:客户端) 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提 ...

  8. SpringCloud全家桶学习之Feign负载均衡----Feign(四)

    一.Feign概述 (1)Feign是什么? 官网地址:https://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-f ...

  9. SpringCloud系列之客户端负载均衡Netflix Ribbon

    1. 什么是负载均衡? 负载均衡是一种基础的网络服务,它的核心原理是按照指定的负载均衡算法,将请求分配到后端服务集群上,从而为系统提供并行处理和高可用的能力.提到负载均衡,你可能想到nginx.对于负 ...

随机推荐

  1. PCAP文件格式分析(做抓包软件之必备)

    转载源:http://blog.csdn.net/anzijin/article/details/2008333 http://www.ebnd.cn/2009/09/07/file-format-a ...

  2. Java:有关try、catch和finally的学习(供自己参考)

    Java:有关try.catch和finally的学习 在看到书本的时候对finally的介绍是:不论是否在try块中产生异常,都会执行finally.当时对这句话的理解不够深,误以为在try...c ...

  3. lintcode-198-排列序号II

    198-排列序号II 给出一个可能包含重复数字的排列,求这些数字的所有排列按字典序排序后该排列在其中的编号.编号从1开始. 样例 给出排列[1, 4, 2, 2],其编号为3. 思路 和 lintco ...

  4. 使用Python 、 go 语言测试rabbitmq的工作机制

    1:在haproxy 和 rabbitmq上安装Python.python2-pip,默认是Python2 yum install -y python python2-pip   2:在haproxy ...

  5. CCF——门禁系统201412-1

    问题描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况.每位读者有一个编号,每条记录用读者的编号来表示.给出读者的来访记录,请问每一条记录中的读者是第几次出现. 输入格式 输入的第一行 ...

  6. 用iptables做代理

    出于安全考虑,Linux系统默认是禁止数据包转发的.配置Linux系统的ip转发功能,打开系统转发功能:echo "1" > /proc/sys/net/ipv4/ip_fo ...

  7. oracle 关于表数据delete 后如何恢复

    今天在PL/SQL中操作不小心删掉了某个表的部分数据,这可吓坏了本猿:于是悄悄的打开电脑,赶紧找度娘帮忙.经过度娘的小爬虫帮助,几分钟就把数据恢复了. 那么表数据delete掉后怎么恢复呢? 用fla ...

  8. 转载-C++ vector 用法

    转自:http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html 在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. ...

  9. shell脚本如何获取当前时间

    在shell脚本里常常需要获取系统时间来处理某项操作,linux的系统时间在shell里是可以直接调用系统变量的如: 获取今天时期:`date +%Y%m%d` 或 `date +%F` 或 $(da ...

  10. 第80天:jQuery插件使用

    jQuery其他补充+ 4.1 链式编程: end()补充 * 补充五角星 评论案例 * 第一步:鼠标移入,当前五角星和前面的五角星变实体.后面的变空心五角星 * 第二步:鼠标点击的时候,为当前元素添 ...