ribbon源码一

一. ribbon的使用

通过前面对微服务ribbon的学习, 知道了ribbon的基本使用方式。

比如:我的order服务,想要调用stock减库存的操作。 应该怎么实现呢? 

第一步:引入ribbon

@LoadBalanced
@Bean
public RestTemplate getRestTemplate() {
    return new RestTemplate();
}

这里通过@LoadBalance注解, 引入了ribbon, 自动实现ribbon的负载均衡策略

 

第二步:写接口

ribbon源码一

 

 如上图, 通过restTemplate手动指定stock服务,并调用其接口. 我们看到在域名部分,我们写的是服务名. 其实调用了ribbon的负载均衡策略以后, 我们大概可以知道, 它是将

http://stock 变成了 http://ip:port/的形式. 这其实就是ribbon的原理. 那么他是如何来选择ip和port的呢? 这就是具体的实现. 是使用轮训的方式找到ip, 还是使用随机的方式找到ip

 

学习源码的方法一
1. 以ribbon为例, 先学会使用ribbon, 知道ribbon具体有哪些功能, 知道其效果
2. 猜测ribbon是如何实现的, 也就是说, 如果是我们自己来实现ribbon的负载均衡功能, 我们要怎么做?
3. 看源码, 对比自己的思想和源码的异同. 

这是一种有自己思考的学习方式. 对于学习源码来说也会觉得更有趣

 

其实,如果想在项目中使用ribbon, 这两步基础就ok了, 那么, 他到底是在底层如何运转的呢? 来看看ribbon的实现.

二. ribbon源码

1. 就从@LoadBalanced这个注解入手

点击进入到@LoadBalanced的源码

ribbon源码一

 

这个源码就是定义了一个注解,没有特殊的含义. 这是一个接口, 那么注解是在哪里被实现的呢?那么,就需要查源码调用了

2. 查找loadBalanced的实现类

怎么找实现类呢?入口在哪里?

方法一: 入口通常在META-INF/spring.factories文件里.里面找到引入了LoadBalanced 类的初始化类. 

ribbon源码一

 

通过观察, 发现和LoadBalanced有关的自动配置类有两个, 二第一个关联性更大, 因为名字基本一样. 所以, 先定位到第一个

 

方法二: 纯经验猜测.  

首先找到LoadBalanced注解所在的包, 然后看看里面有没有和LoadBalanced有关系的AutoConfiguration配置了, 这就是靠猜了

ribbon源码一

 

然后, 我们可以很容易的就看到LoadBalancerAutoConfiguration类. 这个是凭经验找到了, 接下来, 验证一下是不是这个类.

看一看,它里面都注入了哪些东西呢?

ribbon源码一

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

as

上一篇:Springcloud之Ribbon[负载均衡]


下一篇:Spring Cloud学习(四)Ribbon负载均衡服务调用