Ribbon工作原理
重点:Ribbon给restTemplate添加了一个拦截器
思考:Ribbon在做什么:
当我们访问http://lagou-service-resume/resume/openstate/的时候,ribbon应该根据服务名lagou-service-resume获取到该服务的实例列表并按照一定的负载均衡策略从实例列表中获取⼀个实例Server,并最终通过RestTemplate进行请求访问。
Ribbon细节结构图(涉及到底层的⼀些组件/类的描述)
- 获取服务实例列表
- 从列表中选择⼀个server
图中核心是负载均衡管理器LoadBalancer(总的协调者,相当于大脑,为了做事情,协调四肢),围绕它周围的多有IRule、IPing等
- IRule:是在选择实例的时候的负载均衡策略对象
- IPing:是用来向服务发起心跳检测的,通过心跳检测来判断该服务是否可用
- ServerListFilter:根据一些规则过滤传入的服务实例列表
- ServerListUpdater:定义了一系列的对服务列表的更新操作
1、@LoadBalanced源码剖析
我们在RestTemplate实例上添加了一个@LoadBalanced注解,就可以实现负载均衡,很神奇,我们接下来分析这个注解背后的操作(负载均衡过程)
(1)查看@LoadBalanced注解,那这个注解是在哪里被识别到的呢?
(2)LoadBalancerClient类(实现类RibbonLoadBalancerClient,待用)
public interface LoadBalancerClient extends ServiceInstanceChooser
{
// 根据服务执⾏请求内容
<T> T execute(String serviceId, L