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的请求转变
转载于:https://www.cnblogs.com/sgx2019/p/10590367.html
spring cloud ribbon源码解析(一)相关推荐
- Java微服务组件Spring cloud ribbon源码分析
微服务组件Spring Cloud Ribbon源码分析_哔哩哔哩_bilibili Ribbon源码分析 | ProcessOn免费在线作图,在线流程图,在线思维导图 | 1.什么是ribbon? ...
- Spring Cloud Gateway 源码解析(3) —— Predicate
目录 RoutePredicateFactory GatewayPredicate AfterRoutePredicateFactory RoutePredicateHandlerMapping Fi ...
- api网关揭秘--spring cloud gateway源码解析
要想了解spring cloud gateway的源码,要熟悉spring webflux,我的上篇文章介绍了spring webflux. 1.gateway 和zuul对比 I am the au ...
- Spring Cloud Gateway 源码解析(1) —— 基础
目录 Gateway初始化 启用Gateway GatewayClassPathWarningAutoConfiguration GatewayLoadBalancerClientAutoConfig ...
- Spring Cloud Gateway 源码解析(4)-- filter
文章目录 绑定Filter HandlerMapping Filter GatewayFilterChain FilteringWebHandler GlobalFilter实例化 GatewayFi ...
- Spring Cloud Gateway 源码解析(2) —— 路由
目录 基本组件 路由定位器(RouteDefinitionLocator ) 路由定义(RouteDefinition) PredicateDefinition FilterDefinition Co ...
- spring aop 注入源码解析
spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...
- spring aop 注入源码解析 1
spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...
- Spring Cloud脚手架源码
Spring Cloud脚手架源码 @(SpringCloud)[Spring Cloud,框架,组成] Spring Cloud脚手架源码 基本介绍 思维导图 源码 基本介绍 Spring Clou ...
最新文章
- PAT(甲级)2018年冬季考试 7-3 Vertex Coloring
- 深入学习QWidget-1
- Android开发人员官方站点文档 - 国内踏得网镜像
- 建设网站服务器选择,建设网站如何去为网站选服务器?
- 软工小学期实践PART ONE
- python绘制小狗_用Python画一只有点方的小狗狗——turtle库基础入门
- (转)嘉信理财推出全新智能投顾平台
- 基于Pygame框架和蒙特卡洛树搜索的“走四棋儿”人机对战小游戏(附编程详解和代码)
- java电信面试问题及答案_大唐电信java笔试题及答案
- 第七版自顶向下 第一章中文版 计算机网络课后习题答案
- 【STM32】RCC复位和时钟控制器
- c语言 笔试 多选题,全国计算机等级考试C语言十六个选择题类高频知识点
- 64位机器与32位机器的区别
- Centos7下内网YUM源搭建
- 给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
- java多线程应用场景
- Bloom Filter算法优化
- 动态规划矩阵连乘求最优值和最优解
- 第十章 PL/SQL对象类型 ( 1 )
- 【算法】不用乘、除、取余操作实现除法