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. fenby C语言P21

    数据类型 数组名字[个数]: #include <stdio.h> int main(){ int a[8]; float b[9]; char c[10]; return 0;}

  2. 蓝桥杯基础练习 Huffuman树

    基础练习 Huffuman树 问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, -, pn-1},用这列数构造Hu ...

  3. networkx整理

    1.基础知识 1.1.介绍 networkx在2002年5月产生,是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析.仿真建模等工作 ...

  4. Method Not Allowed (GET): /boxuegos/index/ 错误

    1,Method Not Allowed (GET) 请求方法不被允许, 错误原因:我调用的是index这个方法,但是我上面定义了一个空的子路由,所以页面加载不了,控制台出现Method Not Al ...

  5. 学习笔记25_MVC前台API

    **当请求url的规则有所改变时,前台的所有超链接的href都得改,为了避免多处修改,可以href = "< %=url.Action("Controller",& ...

  6. Angular 项目中如何使用 ECharts

    在有些使用 ECharts 库的 Angular 项目中,通常除了安装 npm 包之外,还会在 angular.json 中配置 “build.options.scripts”,将 “node_mod ...

  7. Numpy 排序和使用索引

    # 导包 import numpy as np 排序 .sort() x = np.arange(16) # array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...

  8. 震惊!我竟然发现了JDK源码的问题

    读源码时的思考 最近在看concurrent包下线程池的源码,当我看到ThreadPoolExecutor类的时候,发现了JDK源码的一个问题.以下是ThreadPoolExecutor类的addWo ...

  9. python接口测试-数据驱动-DDT

    DDT是python的第三方库,全名称为:Data-Driven/Decorated Tests. ddt安装 通过pip安装ddt模块,安装Python后,Python自带pip功能包 切换到Pyt ...

  10. PHP判断数组下标有没有存在的方法

    PHP判断数组下标有没有存在的方法<pre>if(!empty($token['errcode'])){ print_r($token['errmsg']); exit();}</p ...