[SpringCloud] OpenFeign核心架构原理 (一)

Feign的本质: 动态代理 + 七大核心组件

Feign底层是基于JDK动态代理来的, Feign.builder()最终构造的是一个代理对象, Feign在构建对象的时候会解析方法上的注解和参数, 获取Http请求需要用到基本参数以及和这些参数和方法参数的对应关系。然后发送Http请求, 获取响应, 再根据响应的内容的类型将响应体的内容转换成对应的类型。

#feign.Feign.Builder:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这些核心组件可以通过Feign.builder()进行替换。

  1. Contract
  2. Encoder
  3. Decoder
  4. Client
  5. InvocationHandlerFactory
  6. RequestInterceptor
  7. Retryer

文章目录

      • 1.Contract
      • 2.Encoder
      • 3.Decoder
      • 4.Client
      • 5.InvocationHandlerFactory
      • 6.RequestInterceptor
      • 7.Retryer
      • 8.总结

1.Contract

在这里插入图片描述

解析方法上的注解和参数, 获取Http请求需要用到基本参数。

Contract的默认实现是解析Feign自己原生注解的。

在这里插入图片描述

会为每个方法生成一个MethodMetadata对象。

在这里插入图片描述

MethodMetadata就封装了Http请求需要用到基本参数以及这些参数和方法参数的对应关系。

SpringCloud在整合Feign的时候, 为了让Feign能够识别Spring MVC的注解, 所以就自己实现了Contract接口。

在这里插入图片描述

在这里插入图片描述

2.Encoder

作用就是将请求体对应的方法参数序列化成字节数组。

在这里插入图片描述

在这里插入图片描述

Feign默认的Encoder实现只支持请求体对应的方法参数类型为String和字节数组。

在这里插入图片描述

如果是其他类型的话, 无法对对象进行序列化, 所以Spring就实现了Encoder接口。

在这里插入图片描述

在这里插入图片描述

可以将任意请求体对应的方法参数类型对象序列化成字节数组。

3.Decoder

Decoder其实就是将响应体由字节流反序列化成方法返回值类型的对象。

在这里插入图片描述

在这里插入图片描述

Spring也同样实现了Decoder。

在这里插入图片描述

在这里插入图片描述

可以将响应体对应的字节流反序列化成任意返回值类型对象。

4.Client

动态代理对象最终用来执行Http请求的组件。

在这里插入图片描述

默认实现为JDK的HttpURLConnection。

在这里插入图片描述

Feign还提供了基于HttpClient实现。

在这里插入图片描述

开启ApacheHttpClient发连接。

        <dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><version>5.3</version></dependency><!-- feign-hc5--><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-hc5</artifactId><version>13.1</version></dependency>

在这里插入图片描述

基于负载均衡的实现:

在这里插入图片描述

根据服务名, 从ibbon中获取一个服务实例的信息, ip和端口号。之后会通过ip和端口向服务实例发送Http请求。

5.InvocationHandlerFactory

InvocationHandler的invoke方法实现就是动态代理走的核心逻辑, 而InvocationHandlerFactory其实就是创建InvocationHandler的工厂。

在这里插入图片描述

在这里插入图片描述

默认实现:

在这里插入图片描述

InvocationHandler的实现类FeignInvocationHandler。

在这里插入图片描述

最终会调用方法对应的MethodHandler的invoke方法。

在这里插入图片描述

Sentinel都实现了自己的InvocationHandler。

在这里插入图片描述

6.RequestInterceptor

在这里插入图片描述

是一个在发送请求前的一个拦截接口, 可以在发送Http请求之前再对Http请求的内容进行修改。如我们可以设置一些接口需要的公共参数, 授权token等。

@Component
public class TokenRequestInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {template.header("token", "token值");}}

7.Retryer

在这里插入图片描述

是一个重试的组件。默认实现:

在这里插入图片描述

默认的重试机制次数为5次。

SpringCloud的默认实现是:

在这里插入图片描述

所以SpringCloud下默认是不会进行重试。

8.总结

在这里插入图片描述

还有一些组件: 日志级别Logger.Level, 日志输出Logger。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:kubernetes(k8s)允许在任意节点使用kubectl命令(5)

我们部署好了主节点以后&#xff0c;我们使用kubectl命令 一切正常&#xff0c;而我们到了别的node上使用 就显示一个这个 这个原因是因为我们开始就配置了master的一个配置文件&#xff0c;在/root/.kube/config 里&#xff0c;而我们的从节点不知道去找那个api接口所以就报…

什么是Vue的服务端渲染(SSR)?它有什么作用?

Vue的服务端渲染&#xff08;SSR&#xff09;是指将Vue组件在服务器端进行渲染&#xff0c;然后将已经渲染好的页面返回给浏览器&#xff0c;相比于传统的客户端渲染&#xff0c;SSR可以更好地优化SEO和加速首屏加载速度。在传统的客户端渲染中&#xff0c;浏览器需要加载所有的…

【教程】Kotlin语言学习笔记(四)——方法(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 第二章 《数据类型》 第三章 《数据容器》 第四章 《方法》 文章目录 【…

BioTech - 药物晶型预测与剂型设计 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/136441046 药物晶型预测与剂型设计是指利用计算机模拟和优化药物分子在固态形式下的结构、性质和稳定性&#xff0c;以及与制剂工艺和质…

Android使用陀螺仪

Android使用陀螺仪 陀螺仪基础运用与理解 在Android应用中使用陀螺仪可以帮助实现各种功能&#xff0c;比如游戏控制、虚拟现实体验、运动追踪等。以下是使用Android陀螺仪的基本步骤&#xff1a; 获取传感器服务&#xff1a; 首先&#xff0c;需要获取设备上的陀螺仪传感器服…

新火种AI|AI商业中的里程碑事件已敲定! 欧盟27国一致通过《人工智能法案》。

作者&#xff1a;小岩 编辑&#xff1a;彩云 根据路透社2月2日消息&#xff0c;欧盟国家就《人工智能法案》立法正式达成协议。 此次立法的成功堪称AI商业领域上的里程碑事件。因为单从商业视角来看&#xff0c;这一法案的通过率先为欧盟内部的人工智能创新提供了明确的法律…

《精益DevOps》:填补IT服务交付的认知差距,实现高效可靠的客户期望满足

写在前面 在当今的商业环境中&#xff0c;IT服务交付已经成为企业成功的关键因素之一。然而&#xff0c;实现高效、可靠、安全且符合客户期望的IT服务交付却是一项艰巨的任务。这要求服务提供商不仅具备先进的技术能力&#xff0c;还需要拥有出色的组织协作、流程管理和态势感…

国内也可以直接采购谷歌与斯坦福联合开发的ALOHA 2双臂协作开源平台了

2024年 1 月&#xff0c;谷歌 DeepMind 联合斯坦福推出了 ALOHA 的增强版本 —ALOHA 2。与一代相比&#xff0c;ALOHA 2 具有更强的抓持性能、更符合人体工程学设计和更强的稳健性&#xff0c;并且在国内就可以直接采购&#xff0c;整套成本还不到 20 万元人民币。 可订购的套装…

数据可视化原理-腾讯-散点图

在做数据分析类的产品功能设计时&#xff0c;经常用到可视化方式&#xff0c;挖掘数据价值&#xff0c;表达数据的内在规律与特征展示给客户。 可是作为一个产品经理&#xff0c;&#xff08;1&#xff09;如果不能够掌握各类可视化图形的含义&#xff0c;就不知道哪类数据该用…

Linux 学习笔记(12)

十二、 系统服务 1 、系统服务分类&#xff0c;根据其使用的方法来分&#xff0c;可以被分为三类 a、由 init 控制的服务&#xff1a;基本都是系统级别的服务&#xff0c;运行级别这一章讲的就是这一类的服务 b、由 System V 启动脚本启动的服务&#xff1a;和我们打交道最多…

NOC2023软件创意编程(学而思赛道)python初中组复赛真题

目录 下载打印原文档做题: 软件创意编程 一、参赛范围 1.参赛组别:小学低年级组(1-3 年级)、小学高年级组(4-6 年级)、初中组。 2.参赛人数:1 人。 3.指导教师:1 人(可空缺)。 4.每人限参加 1 个赛项。 组别确定:以地方教育行政主管部门(教委、教育厅、教育局) 认…

【视频图像取证篇】Amped FIVE专业法医图像和视频增强软件之模糊图像去隔行功能

【视频图像取证篇】Amped FIVE专业法医图像和视频增强软件之模糊图像去隔行功能 法医图像和视频增强软件&#xff0c;专业又强大&#xff01;&#xff01;&#xff01;超过 140 种过滤器和工具&#xff0c;用于分析、恢复和增强数字图像和视频。Amped FIVE能够稳定抖动的视频&…