我们知道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源码解析(一)相关推荐

  1. Java微服务组件Spring cloud ribbon源码分析

    微服务组件Spring Cloud Ribbon源码分析_哔哩哔哩_bilibili Ribbon源码分析 | ProcessOn免费在线作图,在线流程图,在线思维导图 | 1.什么是ribbon? ...

  2. Spring Cloud Gateway 源码解析(3) —— Predicate

    目录 RoutePredicateFactory GatewayPredicate AfterRoutePredicateFactory RoutePredicateHandlerMapping Fi ...

  3. api网关揭秘--spring cloud gateway源码解析

    要想了解spring cloud gateway的源码,要熟悉spring webflux,我的上篇文章介绍了spring webflux. 1.gateway 和zuul对比 I am the au ...

  4. Spring Cloud Gateway 源码解析(1) —— 基础

    目录 Gateway初始化 启用Gateway GatewayClassPathWarningAutoConfiguration GatewayLoadBalancerClientAutoConfig ...

  5. Spring Cloud Gateway 源码解析(4)-- filter

    文章目录 绑定Filter HandlerMapping Filter GatewayFilterChain FilteringWebHandler GlobalFilter实例化 GatewayFi ...

  6. Spring Cloud Gateway 源码解析(2) —— 路由

    目录 基本组件 路由定位器(RouteDefinitionLocator ) 路由定义(RouteDefinition) PredicateDefinition FilterDefinition Co ...

  7. spring aop 注入源码解析

    spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...

  8. spring aop 注入源码解析 1

    spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...

  9. Spring Cloud脚手架源码

    Spring Cloud脚手架源码 @(SpringCloud)[Spring Cloud,框架,组成] Spring Cloud脚手架源码 基本介绍 思维导图 源码 基本介绍 Spring Clou ...

最新文章

  1. PAT(甲级)2018年冬季考试 7-3 Vertex Coloring
  2. 深入学习QWidget-1
  3. Android开发人员官方站点文档 - 国内踏得网镜像
  4. 建设网站服务器选择,建设网站如何去为网站选服务器?
  5. 软工小学期实践PART ONE
  6. python绘制小狗_用Python画一只有点方的小狗狗——turtle库基础入门
  7. (转)嘉信理财推出全新智能投顾平台
  8. 基于Pygame框架和蒙特卡洛树搜索的“走四棋儿”人机对战小游戏(附编程详解和代码)
  9. java电信面试问题及答案_大唐电信java笔试题及答案
  10. 第七版自顶向下 第一章中文版 计算机网络课后习题答案
  11. 【STM32】RCC复位和时钟控制器
  12. c语言 笔试 多选题,全国计算机等级考试C语言十六个选择题类高频知识点
  13. 64位机器与32位机器的区别
  14. Centos7下内网YUM源搭建
  15. 给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
  16. java多线程应用场景
  17. Bloom Filter算法优化
  18. 动态规划矩阵连乘求最优值和最优解
  19. 第十章 PL/SQL对象类型 ( 1 )
  20. 【算法】不用乘、除、取余操作实现除法

热门文章

  1. 政府门户网站解决方案
  2. 单片机实现环形队列_单片机的FIFO(先入先出)循环队列实现
  3. The math behind dynamics of TCP BBR
  4. 老男孩Day2作业:编写购物车程序
  5. 渗透测试用工具(三)layer子域名挖掘机
  6. Unity3D 使用高通AR(一)
  7. 超链接 锚链接 功能性链接 块元素 行内元素
  8. citespace学习笔记经验教训
  9. 塞缪尔·厄尔曼-青春
  10. 按上下限范围分组_分组排列显规律—浅析质量工具直方图