微服务系列<3>---微服务的调用组件 rpc 远程调用

news2024/11/22 13:25:01
什么是rpc调用,让我们调用远程方法就像调用本地方法一样  这就属于rpc调用
rpc是针对于本地来说的
调用远程方法根调用本地方法一样 如果能达到这种效果 就是rpc调用

在这里插入图片描述

如果达到一种效果 调用远程和调用本地一样 他就是一种rpc框架

在这里插入图片描述

2个微服务 之间发的调用 我们之前通过ribbon的方式发起调用 

需要构建一个url 然后再利用我们加了@Lb的restTemplalte做的负载均衡策略

在这里插入图片描述

  如果我可以根据本地方法一样 order.findById()一样的话就很方便 的完成一次调用
我可以基于jdk的动态代理拿一个代理对象  然后我可以调用一个方法
第二就是通过协议层进行 加密 解密 (对请求进行编码 或者序列化 )

第三就是 一定有远端通信(传输层面) nio/bio、netty、grpc
发数据  接受数据(解码) 反射执行 真正的服务

代理层
协议层
传输层
微服务之间完成feign,springcloud 提供了一个rpc框架 feign



在这里插入图片描述

不用像ribbon一样构建一个url  然后restTemplate 发起一个请求
ribbon和feign的对比

在这里插入图片描述

ribbon 是构建一个url 然后基于restTemplate发起的调用(@Lb提供负载均衡的能力)
feign 需要做个标记  记录这是一个Feign调用



代理层   动态代理层

协议层   加密 解密 编码 解码

网络通信层  发起http请求

feign就是一种rpc架构,在springcloud中是怎么应用的

在这里插入图片描述

feign的使用,Feign 底层也实现了负载均衡
rpc 框架的负载均衡怎么实现的
feign底层整合了ribbon


feign的扩展
1. 比如说用户下单,扣减库存的时候可能会涉及到分布式事务,分布式事务可能就会有一个全局的事务id(pid),有时候要做授权
https://blog.csdn.net/qq_41885819/article/details/121955452
怎么在feign的请求头中添加东西
还有rpc框架数据在网络中传输,数据越小效率越高,这时候我们要对数据进行压缩
在feign中也可以配置对数据进行压缩,这些都是我们要考虑的

springcloud中的feign的扩展点 
1.feign的日志组件 logger 帮助我们记录日志请求日志
并且它可以定义我们的日志级别

在这里插入图片描述

可以将请求日志打印出来  发一个请求会打印很多请求日志、

在这里插入图片描述

配置日志级别------FULL  (全部级别)
默认没有任何日志  不利于我们生产排查问题
生产配置BASIC  帮助我们在生产环境追踪问题

在这里插入图片描述

默认是没有任何日志输出的,不利于我们排查问题.性能最好的 因为不用打印日志
basic 我们也可以基于yaml配置  他上面会显示执行时间,可以帮助我们追踪生产问题

在这里插入图片描述

执行时间 这是通过我们yaml的方式来执行的
当然也可以全局配置
个性化需求,可以在yaml 中配置

feign支持日志.因为定位问题的话没有日志的话 是很麻烦的
第二个就是我要通过feign 往下游传递我的token 信息  feign 帮我们实现了默认的拦截器

在这里插入图片描述

在请求发起的位置传递一个token,我想要给下游微服务传参的时候就可以使用这个拦截器

在这里插入图片描述

我们的feingn 底层依赖于ribbon,就可以配置一些超时时间
一个是连接的超时时间 一个是处理请求的超时时间
一个是连接的
一个是处理请求的

在这里插入图片描述

我们超时之后 在微服务中是要做处理的 比如说降级或者熔断机制
不能说一直超时
或者说让我们的请求尽可能的快
数据压缩
对feign 的性能提升的一种配置
开启压缩 节约网络资源

在这里插入图片描述

压缩那些类型数据 比如说xml json
最小压缩值是多少
这样可以提高传输速率

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

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

相关文章

UG\NX 二次开发 相切面、相邻面的选择控件

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 有群友问“UFUN多选功能过滤面不能选择相切面或相邻面之类的吗?” 这个用Block UI的"面收集器"就可以,ufun函数是不行的。 效果&am…

python 将excel 多行进行分组合并

def exc():"""# 需要用到分组的概念:将角色和业务单据的进行分组,结果合并为一行"""df pd.read_excel(test33.xlsx)# 设置需要分组的字段cols [姓名, 科目]#agg() 其中的参数字段为之后输出的表格中的列字段df df.groupby(cols).agg({姓名: f…

Java三大特征之多态

文章目录 一、多态的概念二、多态实现条件三、重写四、向上转型和向下转型4.1向上转型4.2向下转型 五、多态的优缺点六、避免在构造方法中调用重写的方法 一、多态的概念 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为&#x…

Error attempting to get column ‘xxx‘ from result set. Cause: java.sql.SQLDataException错误的解决方法

文章目录 1. 复现错误2. 分析错误3. 解决错误4. 文末总结 1. 复现错误 今天写好导入hive表的详情列表的接口,如下代码所示: /*** hive表导入的回调接口** author super先生* datetime 2023/3/20:16:32* return*/ResponseBodyGetMapping(value "/xx…

老师如何制作学生分班查询系统?

在新学期开始之前,学校和教师需要确定学生的分班信息,以便学生在返校前做好准备。在这个过程中,一个功能强大的分班查询系统将非常有用,可以帮助家长和学生快速查看分班情况。制作一个分班查询系统需要仔细规划和设计,…

ORB-SLAM2栅格地图构建

过程 栅格地图的构建是基于稠密点云地图的构建和保存实现的,需要了解可以看我们前面的博客 基于ORB-SLAM2实时构建稠密点云 在点云地图的基础上构建包含占据信息的八叉树地图和二维栅格地图,便于后续避障、导航等功能的实现 点云转八叉树可以参考下面的…

Visual Studio 2022的MFC框架全面理解

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022开发工具下的MFC框架知识。 MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C类的集合&#xf…

10 个优化技巧,减少 Docker 镜像大小

在本文中,我们将看到减少 docker 镜像大小的方法。 什么是 docker? Docker 是一种容器引擎,可以在容器内运行一段代码。Docker 镜像是在任何地方运行您的应用程序而无需担心应用程序依赖性的方式。 要构建镜像,docker 使用一个名…

基于B/S模式的电子病历系统,覆盖电子病历模板制作到管理使用的整个流程

基于B/S模式的电子病历系统,覆盖电子病历模板制作到管理使用的整个流程 电子病历定义 电子病历EMR(Electronic Medical Record)也称为算机化的病历或基于计算机的病人记录CMR(Computer Based Mdical Record)&#xf…

基于ASP.NET MVC开发的、开源的个人博客系统

推荐一个功能丰富、易于使用和扩展的开源博客,可以轻松地创建和管理自己的博客。 项目简介 基于.Net Framework 4.5开发的、开源博客系统,具有丰富的功能,包括文章发布、分类、标签、评论、订阅、统计等功能,同时也可以根据需要…

做虾皮你必须懂的五大流量运营逻辑!

一、竞品流量来源 商家排名一般有四个维度,弟一个维度是消量弟一,弟二个维度是销售额弟一,第三个维度是流量弟一,第四个维度利润弟一。只要我们找出来自我排名即可,然后打开生意参谋,到竞品分析添加成竞品…

day1-牛客67道剑指offer-JZ4 JZ6 JZ7 JZ9 JZ11 JZ69 JZ70 替换空格 斐波那契数列及其变形 左移/右移运算符

文章目录 1. JZ4 二维数组中的查找暴力法右上角往左下角逼近二分查找-左闭右开区间 2. 替换空格3. JZ6 从尾到头打印链表4. JZ7 重建二叉树思路1哈希加速 5. JZ9 用两个栈实现队列6. JZ11 旋转数组的最小数字常规遍历二分法 7. 斐波那契数列动态规划递归 8. JZ69 跳台阶动态规划…

【C++】模板(初阶)

1、泛型编程 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础 2、函数模板 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本…

IDEA SpringBoot Maven profiles 配置

IDEA SpringBoot Maven profiles 配置 IDEA版本: IntelliJ IDEA 2022.2.3 注意:切换环境之后务必点击一下刷新,推荐点击耗时更短。 application.yaml spring:profiles:active: env多环境文件名: application-dev.yaml、 applicat…

整数拆分——力扣343

文章目录 题目描述法一 动态规划法二 动态规划优化法三 数学 题目描述 法一 动态规划 int integerBreak(int n) {vector<int> dp(n1);for(int i2;i<n;i){int curMax 0;for(int j1;j<i;j){curMax max(curMax, max(j*(i-j), j*dp[i-j]));}dp[i] curMax;} return d…

【JVM】(三) 深入理解JVM垃圾回收机制(GC)

文章目录 前言一、死亡对象的判断方法1.1 引用计数算法1.2 可达性分析算法 二、垃圾回收算法2.1 标记-清除算法2.2 复制算法2.3 标记-整理算法2.5 分代算法2.6 Minor GC 和 Major GC 前言 JVM 的垃圾回收机制&#xff08;Garbage Collection&#xff09;是 Java 中的重要特性之…

【EasyGBD】工程编译过程

目录 1 google Play requires that apps target API level 30 or higher ​编辑 2 Migrate to AndroidX 3 BuildConfig 编译与运行成功 遗留问题 1 google Play requires that apps target API level 30 or higher Google Play requires that apps target API level 30 …

数字孪生的「三张皮」问题:数据隐私、安全与伦理挑战

引言 随着数字化时代的来临&#xff0c;数据成为了当今社会的宝贵资源。然而&#xff0c;数据的广泛使用也带来了一系列隐私、安全与伦理挑战。数字孪生作为一种虚拟的数字化实体&#xff0c;通过收集和分析大量数据&#xff0c;模拟和预测现实世界中的各种情境&#xff0c;为…

【c++】rand()随机函数的应用(一)——rand()函数详解和实例

c语言中可以用rand()函数生成随机数&#xff0c;今天来探讨一下rand()函数的基本用法和实际应用。 本系列文章共分两讲&#xff0c;今天主要介绍一下伪随机数生成的原理&#xff0c;以及在伪随机数生成的基础上&#xff0c;生成随机数的技巧&#xff0c;下一讲主要介绍无重复随…

1230. K倍区间(超级详细,小白入!!!)

输入样例&#xff1a; 5 2 1 2 3 4 5输出样例&#xff1a; 6 这个题看到区间两个字&#xff0c;两眼一瞪可能就和前缀和差分有关 做题思路&#xff1a; 通过记录每个[1,r]区间值的和,看它前面是否出现过一个[1,l](l<r),使得[l,r]区间的值能除尽k 有同学就好奇&#xff0c;…