Ribbon + restTemplate相结合实现负载均衡,具体原理图详见以下截图:

  • LoadBalancerClient 类执行具体的负载均衡,其继承于 LoadBalancerBase。
  • LoadBalancerInterceptor 中注入了 LoadBalancerClient 对象,LoadBalancerClient执行具体的负载均衡,其执行原理为:根据负载规则IRule选择具体的服务,并且IPing会每隔10S向Eureka Client请求同步一次服务列表且检查服务健康状况。
  • restTemplate通过@LoadBalanced的修饰符将LoadBalancerInterceptor 注入到了restTemplate对象中。
  • restTemplate拦截器中注入 LoadBalancerInterceptor 对象,当用户http请求到达时 LoadBalancerInterceptor 对象对齐进行拦截处理,选择具体的请求服务路径,然后restTemplate执行远程服务调用。
  • restTemplate进行rest远程请求的原理详见restTemplate详解,其实质上封装了http请求,默认为HttpUrlConnection,可选Apache的httpClient、Okhttp等。
  • 综上所述,restTemplate的作用即是执行远程服务调用,而LoadBalancerClient作用即选择具体的服务地址来执行负载均衡;在restTemplate进行远程服务调用前因注入了拦截器LoadBalancerInterceptor对http进行了拦截处理,拦截后LoadBalancerClient获取IRule规则选择 IPing维护的本地缓存的服务地址,并将地址返回给restTemplate;restTemplate根据服务地址则执行远程请求调用。
  • ribbon具体实现的代码如下:
    1、RestConfig配置 restTemplate。
  • 2、RibbonService,则通过restTempate调用具体的服务,其中eureka-hi为具体的服务名称,而其存在多个副本

    3、RibbonControl对外曝露一个借口。

    4、如果eureka-hi服务存在两个副本端口号分别为 8771、8772,如果访问 http:/localhost:8764/hi,则会轮询调用eureka-hi的2个副本

Ribbon负载均衡原理相关推荐

  1. Ribbon负载均衡原理,Feign是如何整合Ribbon的?

    文章目录 1. 什么是负载均衡? 2. Ribbon的使用 ①:自定义负载均衡策略 ②:Ribbon的饥饿加载 3. Ribbon的负载均衡原理 ①:收集带有@LoadBalanced注解的RestT ...

  2. Ribbon负载均衡原理,源码解读

    Ribbon负责均衡原理图 源码详解: @LoadBalanced 标记RestTemplate发起的请求,会被loadBalanced拦截和处理 /*** 创建RestTemplate并注入Spri ...

  3. 【详解】Ribbon 负载均衡服务调用原理及默认轮询负载均衡算法源码解析、手写

    Ribbon 负载均衡服务调用 一.什么是 Ribbon 二.LB负载均衡(Load Balancer)是什么 1.Ribbon 本地负载均衡客户端 VS Nginx 服务端负载均衡的区别 2.LB负 ...

  4. SpringCloud LoadBalancerClient 负载均衡原理

    LoadBalancerClient 是 SpringCloud 提供的一种负载均衡客户端,Ribbon 负载均衡组件内部也是集成了 LoadBalancerClient 来实现负载均衡.那么 Loa ...

  5. SpringCloud源码:Ribbon负载均衡分析

    本文主要分析 SpringCloud 中 Ribbon 负载均衡流程和原理. SpringCloud版本为:Edgware.RELEASE. 一.时序图 和以前一样,先把图贴出来,直观一点: 二.源码 ...

  6. 详解Eureka服务注册与发现和Ribbon负载均衡【纯理论实战】

    Eureka服务注册与发现 Eureka简介 在介绍Eureka前,先说一下CAP原则 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability ...

  7. 最新版Spring Cloud Alibaba微服务架构-Ribbon负载均衡篇

    文章目录 前言 一.Ribbon核心概念 二.服务器端负载均衡和Riboon客户端负载均衡 1.服务器端负载均衡: 2.Riboon客户端负载均衡: 三.Ribbon策略 四.Ribbon配置使用 五 ...

  8. SpringCloud[04]Ribbon负载均衡服务调用

    文章目录 Ribbon负载均衡服务调用 1. 概述 1. Ribbon是什么 2. Ribbon能做什么 2. Ribbon负载均衡演示 1. 架构说明 2. Ribbon的POM依赖 3. Rest ...

  9. Spring Cloud概念+案例(eureka注册+拉取、ribbon负载均衡+重试)、netfix各组件介绍【上】

    Spring Cloud概念+案例(断路器)[下] https://blog.csdn.net/LawssssCat/article/details/104632719 [⭐️⭐️⭐️] Spring ...

最新文章

  1. excel 按数据拆分 xlam_利用EXCEL提升效率之五分钟缩短至五秒批量合并EXCEL批量转换PDF批量上传报关单随附单据___EXCELVBA...
  2. Android开发--初探SQLiteDataBase/数据库的创建,更新,插入,查询
  3. Gimmie — 一个创新的 GNOME 面板按次
  4. 机器学习练习数据哪里找?两行代码搞定!
  5. ITK:将vtkImageData转换为itk :: Image
  6. java 基本类型 线程安全_java的基本类型和i++线程安全性的深入解析
  7. Ubuntu 18.04 下如何配置mysql 及 配置远程连接
  8. 常见排序算法的C#实现
  9. 数组concat_js 标准二维数组变一维数组的方法
  10. scrapy使用crawlspider
  11. Luogu P2066 机器分配(dp)
  12. Bootloader和App例程,实现M0基于UART的IAP升级功能,升级过程中通信中断,重新上电后Bootloader仍可运行。实现平台:STM32F030R8
  13. Windows Server 2008关闭internet explorer增强的安全配置
  14. 想要系统稳定?最好用也最容易理解的指标是.....
  15. I2C通信读写数据过程
  16. 电脑硬件知识学习_关于网络学习心得体会集锦七篇
  17. 为什么新装的mysql5.7服务无法启动_mysql 5.7安装 MySQL 服务无法启动但是服务没有报告任何错误...
  18. 深度学习TF—1.TensorFlow2基本操作
  19. 交叉编译中libtool相关的问题
  20. JS 函数参数及其传递

热门文章

  1. DAO层关于sql语句大于或者小于书写问题
  2. 安卓版微信内置浏览器,a href=tel:电话号码/a 这个链接失效,不能跳到拨号界面?...
  3. Python获取、格式化当前时间日期的方法
  4. 概率论笔记7.1矩估计
  5. python拉勾网招聘信息爬取(单线程,最新)
  6. bitnami mysql_Bitnami 快速搭建服务器环境(Django)
  7. 重磅来袭!这么香的技术还不快点学起来,含BATJM大厂
  8. af::convolve在CUDA中局限性
  9. dubbo之mock模拟
  10. 软件项目规范(1):README文件的基本写作规范