微服务框架 SpringCloud微服务架构 4 Ribbon 4.1 负载均衡原理

news2025/2/27 8:09:04

微服务框架

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】

SpringCloud微服务架构

文章目录

      • 微服务框架
      • SpringCloud微服务架构
      • 4 Ribbon
        • 4.1 负载均衡原理
          • 4.1.1 负载均衡流程

4 Ribbon

4.1 负载均衡原理

4.1.1 负载均衡流程

之前我们使用

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

简单实现了一个服务远程调用以及负载均衡的Demo

在这里插入图片描述

在这个过程中,我们就只是改了个服务名称,

在这里插入图片描述

加了个注解

在这里插入图片描述

这一切就自动发生了【里面到底发生了 什么,这就是接下来要说的】

其实这套东西的负载均衡是由一个名为Ribbon 的组件进行实现的

【负载均衡流程】

在我们之前的案例中

在这里插入图片描述

order 其实就是发了一个

String url = "http://userservice/user/" + order.getUserId();

http://userservice/user/1 这样的请求去得到服务

但是其实这个东西直接使用浏览器访问

在这里插入图片描述

可以看到,是不能直接用的,这说明这个过程中,肯定有东西帮我们做了一些处理

其实就是我们的Ribbon

在这里插入图片描述

它从哪儿去得到服务信息呢?很明显,是Eureka

在这里插入图片描述

接着再去做负载均衡

在这里插入图片描述

这样就是一个整体的实现流程

【看源码】

在这里插入图片描述

这个注解的意义就在于,以后使用 restTemplate bean 对象发起的请求,都会被Ribbon 进行拦截并处理

在这里插入图片描述

就是由这个类完成的,可以看到它实现了 ClientHttpRequestInterceptor 接口

在这里插入图片描述

在实现的方法中打一个断点,

在这里插入图片描述

通过debug 进行调试

通过postman 发起一个请求

在这里插入图片描述

在这里插入图片描述

接收到一个这样的请求

单步下去

在这里插入图片描述

现在应该去Eureka 拉取服务信息了

接下来它把 这个服务名称交给了一个叫 loadBalancer 的对象进行处理

在这里插入图片描述

可以看到它就是 一个Ribbon 的东西,名叫Ribbon 负载均衡客户端

继续单步下去

在这里插入图片描述

这里得到了一个“动态服务列表负载均衡器”

在这里插入图片描述

它里面有这两个东西,这就说明服务已经被成功地拉取到了

所以这一大步

在这里插入图片描述

就是在根据服务名称向Eureka 获取服务列表

在这里插入图片描述

接下来这句就是在做负载均衡了 ,选出一个服务

接着走下去

在这里插入图片描述

在这里插入图片描述

它实现了一些接口,像随机、轮询…

默认的负载均衡规则

在这里插入图片描述

接着下去就返回了

进而选出了 8081

在这里插入图片描述

接着就是使用真实主机和IP替换URL 中的信息了

回顾一下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于STM32单片机电子相册设计全套资料

资料编号&#xff1a;188 功能介绍&#xff1a; 本系统采用STM32f103单片机通过SPI接口读取sd卡模块中的图片数据。并在单片机为sd卡模块生成fat文件系统。方便读取sd卡中的文件信息。将Bmp格式的图片存放到sd卡的picture文件夹中&#xff0c;然后单片机进行Bmp解码&#xff0…

GEE批量下载 Python本地快速下载GEE数据(比网页版保存到网盘再下载快几十倍,尤其是在下载几十年的长时间系列数据时,速度提升更加明显)

前言 可根据研究区直接裁剪数据以及进行一些计算处理后再下载&#xff0c;GEE成为了大家下载数据的重要途径&#xff0c;然而直接通过官网网页将数据先保存到网盘再下载的下载方法速度太慢&#xff0c;新号速度还好&#xff0c;越用速度越来越慢&#xff0c;本文提供了一种直接…

DolphinScheduler 机器学习工作流预测今年 FIFA 世界杯冠军大概率是荷兰!

点击蓝字&#xff0c;关注我们作者 | DolphinScheduler Committer 周捷光2022 FIFA 世界杯火热进行中&#xff01;这段时间&#xff0c;这场盛宴吸引了全球球迷的目光。除了让人心跳加快的赛况和被大家调侃像馄饨皮的吉祥物之外&#xff0c;预测和投注哪支队伍将会夺冠绝对是球…

Antd中Table列表行默认包含修改及删除功能的封装

一、前言 ant-design是非常不错、方便的一款前端组件库&#xff0c;而这次用到的ProComponents则是在 Ant Design 上进行了自己的封装&#xff0c;更加易用&#xff0c;与 Ant Design 设计体系一脉相承&#xff0c;无缝对接 antd 项目&#xff0c;样式风格与 antd 一脉相承&am…

Java:多线程基础(二)-线程生命周期

目录 线程生命周期 Thread类的常用方法 构造方法 静态方法 常用实例方法 线程生命周期 线程有其创建、就绪、运行、阻塞、死亡的过程&#xff0c;将其称之为“线程的生命周期”。如下图所示&#xff0c; 对应以上5个状态&#xff0c;jdk-Thread类的源码中定义了枚举类Stat…

计算机网络第五章知识点回顾(自顶向下)

1. 网络层控制面 1.1 网络层功能 1.2选路问题 选路问题的描述&#xff1a; 给定一组路由器和连接路由器的链路&#xff0c;寻找一条从源路由器到目的路由器的最佳路径。 1.3 什么是最佳路径&#xff1f; 1.4 图抽象 1.5 选路算法分类 1.6 链路状态&#xff08;LS&#xff0…

“生成式技术”正在颠覆人类创作!

整理 | 王启隆在过去的半年里&#xff0c;AI 写小说、绘画和剪视频等热点新闻火爆全球&#xff0c;现在只需要在键盘上敲几个关键词&#xff0c;AI 就能在烧着我们显卡的同时画出一幅幅优美的图画&#xff0c;一个全新的应用世界向未来的初创公司敞开了大门。人类现在拥有着一大…

碳中和专利创新专题:各省市县专利面板(原始文件)、低碳专利授权数等多指标数据

一、各省市县专利面板含原始文件 1、数据来源&#xff1a;国家知识产权局 2、时间跨度&#xff1a;1985-2019年 3、区域范围&#xff1a;全国 4、指标说明&#xff1a; 来源 序号 标题 合享价值度 链接到incoPat 公开&#xff08;公告&#xff09;号 公开&#xff08…

数据结构之线性表中的栈和队列【详解】

文章目录引言&#xff1a;栈和队列的讲解&#xff08;一、&#xff09;什么是栈1.栈的概念、结构和图解&#xff1a;&#xff08;1.&#xff09;顺序表和链表的对比&#xff08;严格来说这两个结构是相辅相成的&#xff09;&#xff08;2.&#xff09;栈的概念和结构&#xff0…

[MyBatis]一级缓存/二级缓存/三方缓存

缓存是一种临时存储少量数据至内存或者是磁盘的一种技术.减少数据的加载次数,可以降低工作量,提高程序响应速度 缓存的重要性是不言而喻的。mybatis的缓存将相同查询条件的SQL语句执行一遍后所得到的结果存在内存或者某种缓存介质当中&#xff0c;当下次遇到一模一样的查询SQL时…

[附源码]Python计算机毕业设计Djangossm新能源电动汽车充电桩服务APP

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

UICollectionView

文章目录前言基础概念UICollectionView与相关对象关系注意事项强大的控件相关的类重新使用视图提高性能例子一些方法前言 本篇&#xff1a;进行UICollectionView的学习 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 基础 概念 UICollectionView是我…

【毕业设计】31-基于单片机的农业蔬菜大棚温度自动控制系统设计(原理图工程+源码工程+仿真工程+答辩论文+答辩PPT)

typora-root-url: ./ 【毕业设计】31-基于单片机的农业蔬菜大棚温度自动控制系统设计&#xff08;原理图工程源码工程仿真工程答辩论文答辩PPT&#xff09; 文章目录typora-root-url: ./【毕业设计】31-基于单片机的农业蔬菜大棚温度自动控制系统设计&#xff08;原理图工程源…

NetCore OpenIdConnect验证为什么要设置Authority?

在使用Identity Server作Identity Provider的时候&#xff0c;我们在NetCore的ConfigureServices((IServiceCollection services))方法中,常需要指定options的Authority&#xff0c;如下代码所示&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 …

基于PHP+MYSQL酒店管理系统的设计与开发

随着人们生活条件的提高,旅游和出差已经成了家常便饭,但是因为他向异地所以第一个要解决的问题就是吃住问题,吃先对是比较好解决的一个问题,随便一个超市或者饭店甚至地摊就能解决这一问题,但是总不能露宿街头吧,所以很多人在到达目的地的第一时间就是去寻找一个能够入住的酒店…

一文彻底搞懂Mysql索引优化

专属小彩蛋&#xff1a;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff08;前言 - 床长人工智能教程&#xff09; 目录 一、索引介绍 二、性能分析 三、查询优化 一、索引介绍…

Python使用矩阵分解法推荐系统找到类似的音乐

这篇文章是如何使用几种不同的矩阵分解算法计算相关艺术家。最近我们被客户要求撰写关于的矩阵分解法推荐系统研究报告&#xff0c;包括一些图形和统计输出。代码用Python编写&#xff0c;以交互方式可视化结果。 加载数据 这可以使用Pandas加载到稀疏矩阵中&#xff1a; # r…

Jmeter 使用BeanShell断言,实现自动获取文章列表,并判断文章是否为当天发布的

系列文章目录 提示&#xff1a;阅读本章之前&#xff0c;请先阅读目录 文章目录系列文章目录前言一、正则表达式提取器&#xff0c;提取所有文章id二、循环控制器&#xff0c;读取每篇文章的创建时间三、JSON提取器&#xff0c;提取创建时间&#xff0c;然后进行判断四、运行结…

Java设计模式七大原则-里氏替换原则

里氏替换原则 OO中的继承性的思考和说明 继承包含这样一层含义&#xff1a;父类中凡是已经实现好的方法&#xff0c;实际上是在设定规范和契约&#xff0c;虽然它不强制要求所有的子类必须遵循这些契约&#xff0c;但是如果子类对这些已经实现的方法任意修改&#xff0c;就会对…