Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。所以,对Spring Cloud Ribbon的理解和使用,对于我们使用Spring Cloud来构建微服务非常重要。

Ribbon为我们提供了很多负载均衡算法,例如轮询、随机等等,我们也可以自己定义算法,那么Ribbon默认使用哪种模式呢,我们可以测试一下,我这里启动了三个服务提供者,一个服务消费者,如下图所示

测试类

@SpringBootTest
@RunWith(SpringRunner.class)
public class LoadBalanceTest { @Autowired
private RibbonLoadBalancerClient client; @Test
public void test(){
for (int i = 0; i < 50; i++) {
ServiceInstance instance = client.choose("service-provider");
System.out.println(instance.getHost()+":"+instance.getPort());
}
}
}

输出结果

LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890

可以很明显的看出这是一个轮询的模式,所以可以证明Ribbon默认使用轮询的负载均衡模式


那么如何切换其负载均衡模式呢?

只需要在配置文件里配置下面这段(以yml为例):

{服务提供者名称}:
ribbon:
NFLoadBalancerRuleClassName: {IRule的实现类}

比如我的配置如下:

service-provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

可选择的模式如下所示,这些都是IRule的实现类

切换为随机模式的效果是什么样的呢?修改配置后再次运行测试类

LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8890
LAPTOP-LFAOC6JB:8888
LAPTOP-LFAOC6JB:8889
LAPTOP-LFAOC6JB:8889

可以看出,运行的结果变为随机的了

Spring Cloud - 切换Ribbon的负载均衡模式的更多相关文章

  1. Spring Cloud Gateway Ribbon 自定义负载均衡

    在微服务开发中,使用Spring Cloud Gateway做为服务的网关,网关后面启动N个业务服务.但是有这样一个需求,同一个用户的操作,有时候需要保证顺序性,如果使用默认负载均衡策略,同一个用户的 ...

  2. 2.【Spring Cloud Alibaba】实现负载均衡-Ribbon

    负载均衡的两种方式 如何实现负载均衡 目前已经实现让A总能找到B,如何实现负载均衡 负载均衡的两种方式 服务器端负载均衡 客户端负载均衡 使用Ribbo实现负载均衡 Ribbon是什么 ==Netfl ...

  3. 4.Spring Cloud初相识--------Feign负载均衡

    前言: 在上一节里,我们学习了ribbon的使用. 我们了解到ribbon是一个客户端负载均衡机制. 而我们今天要讲的Feign呢,也是一款客户端负载均衡机制. 或者这样说,Feign封装了ribbo ...

  4. 【Spring Cloud学习之三】负载均衡

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 Spring Cloud 1.2 主流的负载均衡技术有nginx.LVS.HAproxy.F5,Spring Clou ...

  5. Spring Cloud 客服端负载均衡 Ribbon

    一.简介   Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署, ...

  6. Spring Cloud ---- 服务消费与负载均衡(Rest + Ribbon )

    上一篇主要写了基于Eurake的服务的注册,主要就是创建注册中心,创建服务者,将服务者注册到注册中心,完成服务的暴露.这一篇主要写服务的消费与服务消费的负载均衡. 服务的调用方式有两种,Rest + ...

  7. Spring Cloud ---- 服务消费与负载均衡(feign)

    feign是一个声明式的伪客户端,只需要创建一个接口并且注解,它具有可插拔的特性.feign集合了Ribbon,再与Eurake结合实现服务的注册发现与负载均衡.结合Hystrix,具有熔断功能. 1 ...

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

    假如我们的multiple服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端口8762修改 ...

  9. 使用ribbon实现负载均衡

    使用ribbon之前的准备工作: 1.你要有两个服务,一个是服务消费方(下图的xing-movie是消费方),一个是服务提供方(xing-user是服务提供者),并且服务提供方要有两个实例,也就是xi ...

随机推荐

  1. join的使用

    我们还是以这四张表为例:1.left joinselect * from student a left join score b on a.sid=b.sid; 也就是说A中的元素都会显示,没有值的用 ...

  2. .NET手撸2048小游戏

    .NET手撸2048小游戏 2048是一款益智小游戏,得益于其规则简单,又和2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎"FlysEng ...

  3. 【Java】Windows配置Java环境变量

    一.配置环境变量 1.新建系统变量 JAVA_HOME和CLASSPATH 变量名:JAVA_HOME 变量值:D:\jdk\jdk1.7.0_80 变量名:CLASSPATH 变量值:.;%JAVA ...

  4. 《Effective Java》 读书笔记(四) 使用私有构造方法执行非实例化

    在许多时候,我们会写一个类,这个类只是用来提供一些静态方法或静态属性,就好像C++的函数一样,比如 java.lang.Math,java.util.Arrays等,但是有时候这些类的用户可能会在无意 ...

  5. vue-router动态添加路由报错

    [报错] Uncaught Error: [vue-router] route config "component" for path: /home cannot be a str ...

  6. P3043 [USACO12JAN]牛联盟Bovine Alliance——并查集

    题目描述 给出n个点m条边的图,现把点和边分组,每条边只能和相邻两点之一分在一组,点可以单独一组,问分组方案数. (友情提示:每个点只能分到一条边,中文翻译有问题,英文原版有这样一句:The cows ...

  7. My Android 学习之旅--开始

    其实,很早就想写写博客了,一直懒到现在. 学习android也不是今天才开始的,大概在2月份过完年之后就开始了,买了我认为还可以的书<Android从入门到精通>,花了不到一个月的时间,把 ...

  8. STM32中断系统

    1.中断介绍:    1.1 中断概念 CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂 时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序 或中断处理程      ...

  9. 算法编程题积累(3)——腾讯笔试"构造回文“问题

    首先理解题意,回文串的特点:倒序后跟原串相同.故而可以将原串看成向一个回文串在任意位置添加任意字符后形成的字符串,也就是说原串中存在一段未必连续的回文序列. 通过分析可以知道AC本题的核心思路:求出回 ...

  10. SpringBoot RESTful api

    一.REST简单介绍 REST代表Representational State Transfer,是一种URI风格,是一组架构约束条件和原则.REST风格服务调用就是解析URL请求,将请求由逻辑构建处 ...