zoukankan      html  css  js  c++  java
  • 服务调用之SpringCloudRibbon客户端负载均衡工具使用

    一、什么是SpringCloudRibbon?

      SpringCloudRibbon是一套基于NetflixRibbon实现的客户端负载均衡工具框架。Ribbon原是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用,在配置文件中列出负载均衡所有的服务模块,Ribbon会自动的帮助你根据某种规则去连接这些服务。目前官网Ribbon已经进入维护模式,但是用较多,仍需要学习。

      负载均衡分为集中式负载均衡(比如nginx)和进程内负载均衡(比如ribbon),Nginx是服务器负载均衡,客户端的所有请求都会经过Nginx,由Nginx实现转发,而Ribbon是本地(进程内)负载均衡,消费者在调用微服务接口的时候,会在注册中心上获取注册信息服务列表后缓存到JVM本地,在本地实现rpc远程调用,因此Ribbon是寄宿于服务消费者模块的,其架构如下

    二、Ribbon使用

      1、引入jar包:正常情况下,引入新的工具需要引入新的坐标,使用Ribbon同样需要引入jar包,但是在使用较新版本Eureka组件时不需要引入,因为该组件默认内部整合了Ribbon组件,所以我们可以直接使用。如果需要单独引入,则添加如下坐标代码

    <dependency>
      <groupid>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>

      2、Ribbon结合RestTemplate使用,完成负载均衡请求:Ribbon的负载均衡策略,可以通过实现IRule接口来重写,Ribbon实现IRule的类有如下结构

      以上7种模式的切换,官方文档明确给出了警告:这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的。因此切换规则方式如下:

      a.在主启动类所在的包外新建一个package,新建一个java类命名为MyRule,写入如下代码

    @configuration
    public class MyRule
    @Bean
    public IRule myRule( ){
    return new RandomRule();//定义为随机
    }
    )

      b.在主启动类中增加@Ribbonclient(name = "cloud-server-name" ,configuration=MyRule.class)注解来指定自定义IRule配置文件。

    三、Ribbon负载均衡策略自定义

      除了上述7种内置的策略之外,Ribbon还支持自定义策略,该策略要求继承AbstractLoadBalancerRule实现chose()方法或者实现IRule,且不能放在@ComponentScan所扫描的当前包和子包下,定义好策略之后,同样需要使用@Ribbonclient(name = "cloud-server-name" ,configuration=MySelfRule.class)注解来指定自定义IRule策略。

      

  • 相关阅读:
    EF实现增删改查
    托管代码与非托管代码的区别
    堆、栈以及队列
    C#装箱和拆箱
    Leecode刷题之旅-C语言/python-349两个数组的交集
    Leecode刷题之旅-C语言/python-344反转字符串
    Leecode刷题之旅-C语言/python-217存在重复元素
    Leecode刷题之旅-C语言/python-206反转链表
    Leecode刷题之旅-C语言/python-204计数质数
    Leecode刷题之旅-C语言/python-203移除链表元素
  • 原文地址:https://www.cnblogs.com/zqhIndex/p/15395293.html
Copyright © 2011-2022 走看看