SpringCloud学习笔记(7)----Spring Cloud Netflix之负载均衡-Ribbon的深入理解

1. 注解@LoadBalanced

  作用:识别应用名称,并进行负载均衡。

2. 入口类:LoadBalancerAutoConfiguration

  

  

  说明:类头上的注解可以知道Ribbon 实现的负载均衡自动化配置需要满足两个条件
    1、 RestTemplate 类必须存在于当前工程的环境中
    2、 在Spring 的Bean工程中有必须有LoadBalancerClient 的实现Bean

3.  LoadBalancerClient 类

  

  

  

  说明:从接口中,可以通过定义的方法了解到负载均衡器具备下面几个功能
    1. 根据服务 ID ,从负载均衡器里面挑选一个服务实例 
    2. 使用从负载均衡器中挑选出的服务实例来执行指定的内容 。
    3. 为系统构建一个合适的“host:port” 形式的URI。

4. LoadBalancerInterceptor 类

  

  

 

   说明 :当一个被@LoadBalanced注解修饰的 RestTemplate对象向外发起HTTP请求时,会被 LoadBalancerInterceptor类的 intercept函数所拦截,这个时候就会使用负载均衡器进行调执执行。

  

  

  说明 :
    1、 利用IloadBalancer接口 ,调用其 调用其 chooseServer("default")方法获取一个Server。
    2、 包装一个 RibbonServer对象 ,之后执行 execute方法

  RibbonClientConfiguration类

  

  这里是IloadBalancer的实现类

  ZoneAwareLoadBalancer类

  

  

  说明 :
    1、 当 Zone个数大于 个数大于 1时,才会向下执行 时,才会向下执行
    2、 当小于 1时,使用父类的 chooseServer方法 获取 Server
    3、 当大于 1是,随机选择一个 Zone使用 zoneLoadBalancer的chooseServer方法 获取 Server
    4、 最终都是调用 BaseLoadBalancer类的 chooseServer方法

  BaseLoadBalancer类

  

  说明 :
    1、 这里使用 rule的 choose方法进行调用 方法进行调用 ,返回 server
    2、 rule的默认是使用 RoundRobinRule

  RibbonLoadBalancerClient类

  

 

   说明 :apply使用的是 LoadBalancerRequestFactory类里面的方法 类里面的方法 ,从 LoadBalancerInterceptor类可 以知道 。RibbonStatsRecorder是对服务的请求进行跟踪记录

  

 

   说明:封装了 ServiceRequestWrapper,重写了getURI函数,重写后的 getURI会通过调用 LoadBalancerClient接口的 reconstructURI函数来重新构建一个 函数来重新构建一个 URI进行访问

  

  

  

 

原文 SpringCloud学习笔记(7)----Spring Cloud Netflix之负载均衡-Ribbon的深入理解

posted @ 2019-05-10 14:16  xiaoshen666  阅读(282)  评论(0编辑  收藏  举报