spring cloud ribbon源码解析

Posted sgx2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring cloud ribbon源码解析相关的知识,希望对你有一定的参考价值。

  我们知道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源码解析的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Ribbon 源码分析---负载均衡算法

Spring Cloud2.1-Ribbon核心源码

ribbon源码解析

SpringCloud--Ribbon--源码解析--Ribbon入口实现

Ribbon核心API源码解析:ribbon-coreIClient请求客户端 - 02

Ribbon从入门到源码解析