一. ribbon的使用
通过前面对微服务ribbon的学习, 知道了ribbon的基本使用方式。
比如:我的order服务,想要调用stock减库存的操作。 应该怎么实现呢?
第一步:引入ribbon
@LoadBalanced @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); }
这里通过@LoadBalance注解, 引入了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的源码
这个源码就是定义了一个注解,没有特殊的含义. 这是一个接口, 那么注解是在哪里被实现的呢?那么,就需要查源码调用了
2. 查找loadBalanced的实现类
怎么找实现类呢?入口在哪里?
方法一: 入口通常在META-INF/spring.factories文件里.里面找到引入了LoadBalanced 类的初始化类.
通过观察, 发现和LoadBalanced有关的自动配置类有两个, 二第一个关联性更大, 因为名字基本一样. 所以, 先定位到第一个
方法二: 纯经验猜测.
首先找到LoadBalanced注解所在的包, 然后看看里面有没有和LoadBalanced有关系的AutoConfiguration配置了, 这就是靠猜了
然后, 我们可以很容易的就看到LoadBalancerAutoConfiguration类. 这个是凭经验找到了, 接下来, 验证一下是不是这个类.
看一看,它里面都注入了哪些东西呢?
as