Spring Cloud如何切换Ribbon负载均衡模式

 更新时间:2019年12月04日 08:58:17   作者:SongAlone  
这篇文章主要介绍了Spring Cloud如何切换Ribbon负载均衡模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了Spring Cloud如何切换Ribbon负载均衡模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java 深入探究讲解抽象工厂模式

    Java 深入探究讲解抽象工厂模式

    当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式,抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态
    2022-04-04
  • java.net.URL超时时间默认无限制问题小结

    java.net.URL超时时间默认无限制问题小结

    文章介绍了如何在Java中使用URLConnection或HttpURLConnection设置连接和读取超时,以处理网络问题导致的长时间等待,通过httpstat.us网站可以测试不同延迟的请求,并演示了如何通过调整超时时间处理超时异常,感兴趣的朋友一起看看吧
    2025-02-02
  • 图解分析Javaweb进程与线程

    图解分析Javaweb进程与线程

    这篇文章主要介绍了Javaweb进程与线程的知识,本篇文章通过简要的案例,讲解了它的基础原理与使用,以下就是详细内容,需要的朋友可以参考下
    2022-03-03
  • Spring-基于Spring使用自定义注解及Aspect实现数据库切换操作

    Spring-基于Spring使用自定义注解及Aspect实现数据库切换操作

    这篇文章主要介绍了Spring-基于Spring使用自定义注解及Aspect实现数据库切换操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 在eclipse中安装Scala环境的步骤详解

    在eclipse中安装Scala环境的步骤详解

    这篇文章主要介绍了在eclipse中安装Scala环境的步骤,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Java实现的打地鼠小游戏完整示例【附源码下载】

    Java实现的打地鼠小游戏完整示例【附源码下载】

    这篇文章主要介绍了Java实现的打地鼠小游戏,结合完整实例形式分析了Java多线程操作及键盘按键响应实现的打地鼠游戏功能相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • Java判断文件或者文件夹是否存在的功能(不存在创建,存在删除)

    Java判断文件或者文件夹是否存在的功能(不存在创建,存在删除)

    在Java中,要判断文件或文件夹是否存在,并根据判断结果来执行创建或删除操作,你可以使用java.io.File类或者java.nio.file包中的类,本文介绍Java判断文件或者文件夹是否存在,不存在创建,存在删除,感兴趣的朋友一起看看吧
    2025-03-03
  • Java毕业设计实战之生活旅行分享平台的实现

    Java毕业设计实战之生活旅行分享平台的实现

    这是一个使用了java+Springboot+JPA+Jsp+Html+js+Ajax+maven+mysql开发的生活旅行分享平台,是一个毕业设计的实战练习,具有分享发布平台该有的所有功能,感兴趣的朋友快来看看吧
    2022-02-02
  • Java多线程深入理解

    Java多线程深入理解

    这篇文章主要介绍了java多线程编程实例,分享了几则多线程的实例代码,具有一定参考价值,加深多线程编程的理解还是很有帮助的,需要的朋友可以参考下
    2021-07-07
  • java异步方式实现登录

    java异步方式实现登录

    这篇文章主要为大家详细介绍了java异步方式实现登录的相关资料,感兴趣的朋友可以参考一下
    2016-05-05

最新评论