SpringCloud实用篇(三)——Ribbon负载均衡
Ribbon负载均衡
负载均衡流程
RestTamplate被@LoadBalanced标记表明要被Ribbon拦截处理
追踪源码:
与黑马课程的源码有所不同
首先进入LoadBalancerAutoConfigration自动装配类,这里可以发现传了一个final LoadBalancerInterceptor loadBalancerInterceptor的参数,通过List集合加入loadBalanceInterceptor,最终restTemplate设置次拦截器,RetryLoadBancerInterceptor又是什么呢?
我们点LoadBalancerInterceptor进去看一下,可以看到他是实现ClientHttpRequestInterceptor的实现类,而ClientHttpRequestInterceptor是拦截我们http请求的拦截器
我们再回到我们的LoadBalancerInterceptor,我们在这里可以看到它实现了Interptor方法
进入我们所打的断点上
这就说明当我们加了服务发现的注解时,我们会被我们的ribbot服务拦截
以上拦截到了userservice用户服务名
当我们断点到retutrn (ClientHttpResponse)this.loadBalancer.excute(…)时,我们可以发现RibbonBalancer(Ribbon的负载均衡客户端)
!!!
进入excute()方法
在进入RibbonLoadBalancerClient实现类
我们可以发现上Server server = this.getServer(loadBalancer,hint)就是我们实现负载均衡的方法
总结:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Fancydog‘s blogs!