SpringCloud-Ribbon 学习记录
一、作用
负载均衡
二、使用方式
1、方式一
1、配置指定服务器地址。测试自行用 springboot 启两个项目
2、调用项目 application.properties 配置如下
3、代码使用
使用 LoadBalancerClient+RestTemplate
2、方式二
使用 @LoadBalanced
3、方式三
cloud 中 Feign 配合 LoadBalanced 一起使用
三、源码流程思路
3.1、代码大致流程和类图
细节翻代码
1、装配类:org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration
装配 bean:RibbonLoadBalancerClient
基础 SpringClientFactory 初始化 RibbonLoadBalancedRetryFactory
2、 装配类:org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration
依次装载如下类:LoadBalancerInterceptor。代码执行看这里
RestTemplateCustomizer:对修饰 @LoadBalanced 注解的 RestTemplate 添加拦截器
SmartInitializingSingleton:对 RestTemplate 包装
3、入口方法:org.springframework.web.client.RestTemplate#doExecute
类结构:
4、获取创建工厂创建 clientRequest
调用父类 org.springframework.http.client.support.InterceptingHttpAccessor#getRequestFactory
创建 InterceptingClientHttpRequestFactory
工厂创建 org.springframework.http.client.InterceptingClientHttpRequest 对象
类图
5、重点代码:response = request.execute();
步骤四里创建的对象:
最终执行到:InterceptingClientHttpRequest
org.springframework.http.client.InterceptingClientHttpRequest.InterceptingRequestExecution#execute
6、存在拦截器。就执行拦截器
这里装载了拦截器 org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor#intercept
7、追踪代码执行到
org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient#execute(java.lang.String, org.springframework.cloud.client.loadbalancer.LoadBalancerRequest<T>, java.lang.Object)
8、负载策略选择
com.netflix.loadbalancer.BaseLoadBalancer#chooseServer
9、负载规则类
对应的策略代码。对应实现类阅读。
10、默认轮询策略
版权声明: 本文为 InfoQ 作者【Geek_4df958】的原创文章。
原文链接:【http://xie.infoq.cn/article/072b261e54b052adc76c88749】。文章转载请联系作者。
评论