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的深入理解