SpringCloud之Bibbon源码分析

Ribbon 源码解析

Ribbon 运行的时候是创建一个RestTemplate 然后在加一个@LoadBalancer的注解 接口即可完成ribbon的整合

那@LoadBalancer 做了那些工作呢 ?看下源码

SpringCloud之Bibbon源码分析

会发现在这个包下有一个LoadBalancerAutoConfiguration的加载类 看下这个类做什么

SpringCloud之Bibbon源码分析

加入loadBalancerClient.class 同时还有一些初始化的bean

看源码会发在有@loadBalancer注解修饰的restTmplate 会被加上一个拦截器

SpringCloud之Bibbon源码分析

这样思路就清晰了 ribbon的负载是通过拦截器处理的

下面就看下拦截器是怎么处理的

SpringCloud之Bibbon源码分析

看源码会发现这个主战场在ribbonLoadBalancerClinet.class

SpringCloud之Bibbon源码分析

负载方法是choose()跟源码最终会找到 ILoadBalancer.class

SpringCloud之Bibbon源码分析

 

 

SpringCloud之Bibbon源码分析

DynamicServerListLoadBalancer.class 父类的加载策略

SpringCloud之Bibbon源码分析

发现默认的负载策略是 RoundRobinRule()

SpringCloud之Bibbon源码分析

这些是负载策略不同的实现类

WeightedResponseTimeRule:根据server响应平均时长来确定使用哪个server 响应时间越长,权重越小。

RandomRule: 随机选择一个可用的服务器。

RetryRule: 重试机制的选择逻辑

AvailabilityFilteringRule:并发下的

SpringCloud之Bibbon源码分析

SpringCloud之Bibbon源码分析

到此负载策略就分析完了,今天就到这里了  还有好多事情要做。