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. GCD最大公约数

    说明: 最初跟鹏哥学习最大公约数的算法是辗转相除,确实印象很深刻,那种辗转赋值的思想在好多题目中都有运用,但随着进一步学习,我也参考了其他几种方便快捷的最大公约数求法,在这里做一个总结. . int ...

  2. .net组件和com组件&托管代码和非托管代码

    com组件和.net组件: COM组件是非托管对象,可以不需要.NET框架而直接运行,.NET框架组件是托管对象,必须有.NET框架的支撑才能运行. COM组件有独立的类型库文件,而.NET组件是通过 ...

  3. 四则运算——单元测试(测试方法:Right-BICEP )

    一.测试的具体部位 Right-结果是否正确? B-是否所有的边界条件都是正确的? I-能查一下反向关联吗? C-能用其他手段交叉检查一下结果吗? E-你是否可以强制错误条件发生? P-是否满足性能要 ...

  4. 3dContactPointAnnotationTool开发日志(二六)

      之前给老师看了看我的毕设,老师觉得操作太复杂了,要能像3ds max里那样可以拖动物体的轴进行平移,沿着显示的圆圈旋转以及缩放啥的.说白了就是在Unity3d的Game视图显示出Scene视图里的 ...

  5. 【Leetcode】771. Jewels and Stones

    (找了leetcode上最简单的一个题来找一下存在感) You're given strings J representing the types of stones that are jewels, ...

  6. mysql中用户和权限

    用户管理 用户数据所在位置: mysql中的所有用户,都存储在系统数据库(mysql)中的user 表中——不管哪个数据库的用户,都存储在这里. 表初始内容如下: 创建用户: 形式: create   ...

  7. c# assembly

    string path = @"c:\text.dll" Assembly assembly = Assembly.LoadFile(path); path = "MyP ...

  8. Java多线程 -yield用法

    前几天复习了一下多线程,发现有许多网上讲的都很抽象,所以,自己把网上的一些案例总结了一下! 一. Thread.yield( )方法: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态).cpu ...

  9. Android内存泄漏第二课--------(集合中对象没清理造成的内存泄漏 )

    一.我们通常把一些对象的引用加入到了集合容器(比如ArrayList)中,当我们不需要该对象时,并没有把它的引用从集合中清理掉,这样这个集合就会越来越大.如果这个集合是static的话,那情况就更严重 ...

  10. BZOJ4892 Tjoi2017dna(后缀数组)

    对每个子串暴力匹配至失配三次即可.可以用SA查lcp.然而在bzoj上被卡常了.当然也可以二分+哈希或者SAM甚至FFT. #include<iostream> #include<c ...