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. [C++] Solve "Launch Failed. Binary not found." error on Eclipse

    This error is that the default lanch configuration is not being created for this project. To solve i ...

  2. 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?(转)

    摘自https://blog.csdn.net/jiange_zh/article/details/50198097 在算法竞赛中,我们常常需要用到一个“无穷大”的值,对于我来说,大多数时间我会根据具 ...

  3. git中的重要指令

    git命令 任何操作都需要以 git 命令为开头 本地操作: git init 初始化一个本地仓库 新建为 master主分支 git status 查看当前分支状态 git add <文件名& ...

  4. 智能客服 利用python运行java代码

    因为需要在linux中用python来进行分析,顾需要利用python来运行java中语音转文字和文字转语音代码 在python中运行java代码需要利用jpype

  5. 搜索引擎Elasticsearch REST API学习

    Elasticsearch为开发者提供了一套基于Http协议的Restful接口,只需要构造rest请求并解析请求返回的json即可实现访问Elasticsearch服务器.Elasticsearch ...

  6. MQTT协议-----订阅

    MQTT协议笔记之订阅      http://www.blogjava.net/yongboy/archive/2014/04/12/412351.html MQTT - chszs的专栏    h ...

  7. 对IT行业的一些思考

          阅读完两篇报道,从“2014年十大最热门行业和职业排行榜”可以看出最热门的行业是IT行业,可以看出IT行业在未来的发展前景很乐观,选择IT行业的人也会越来越多,IT行业也会越来越庞大.但是 ...

  8. 使用 TestNG 并发测试 ;

    使用TestNG对IE /Chrome/firefox 进行兼容性并发测试 : package testNGTest; import org.openqa.selenium.By; import or ...

  9. fsockopen 异步非阻塞式请求数据

    index.php <?php ini_set ( "max_execution_time", "0" ); // 要传递的数据 $form_data = ...

  10. python的N个小功能(找到符合要求的图片,重命名,改格式,缩放,进行随机分配)

    ########################################################################## 循环读取该目录下所有子目录和子文件 ####### ...