码迷,mamicode.com
首页 > 编程语言 > 详细

spring cloud ribbon源码解析(一)

时间:2019-03-24 21:30:46      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:使用   bsp   cloud   mamicode   继承   dba   template   包含   adb   

  我们知道spring cloud中restTemplate可以通过服务名调接口,加入@loadBalanced标签就实现了负载均衡的功能,那么spring cloud内部是如何实现的呢?

通过@loadBalanced我们进入标签

技术图片

注释解释这个标签是标记为restTemplate,作为loadBalancerClient,接着去看loadBalancerClient

技术图片

loadBalancerClient通过继承serviceInstanceChooser,主要包含以下几个抽象方法:

1、choose抽象方法,作用是通过serviceId获取到服务实例;

2、execute方法是执行请求;

3、reconstructURI方法是通过服务实例转换成ip:port的形式

通过loadBalancerClient所在包,我们发现LoadBalancerAutoConfiguration为自动配置类,该类主要作用:

1、创建LoadBalancerInterceptor拦截器

2、创建restTemplateCustomizer,用于增加拦截器

接着,我们看LoadBalancerInterceptor拦截器

技术图片

通过这里我们可以看出,当一个restTemplate被@loadBalance标签注释时,调用请求的时候会被拦截,通过获取请求中的服务名,传入loadBalancer的执行方法,我们点击这个execute进入RibbonLoadBalancerClient的具体实现

技术图片

可以看出通过传入的serverId获取server,进入ILoadBalancer可以看到这几个抽象方法

技术图片

技术图片

可以看到server类中有host和port,chooseServer有以下几个实现类

技术图片

通过RibbonClientConfiguration,可以知道使用zoneAwareLoadBalancer来实现负载均衡

技术图片

通过chooseServer获取到server后,下面,我们再回到RibbonLoadBalancerClient

技术图片

可以看出通过request的apply发送实际的请求,从而实现从服务名变成host:port的请求转变

 

spring cloud ribbon源码解析(一)

标签:使用   bsp   cloud   mamicode   继承   dba   template   包含   adb   

原文地址:https://www.cnblogs.com/sgx2019/p/10590367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!