聊聊我认为的OpenFeign

聊聊,认为,openfeign · 浏览次数 : 24

小编点评

**OpenFeign框架的设计思路** OpenFeign框架的主要设计思想是**偷懒**,即通过**@Import**注解简化和集成第三方框架中的 Feign 客户端。 **主要步骤:** 1. **@Import 注解:**OpenFeign 通过 `@Import` 注解引入 `FeignClientsRegistrar` 接口实现类。 2. **配置解析:**该类会解析配置,并根据配置初始化 Feign 客户端。 3. **FactoryBean 工厂:**OpenFeign 定义了一个 `FactoryBean` 工厂实现接口类,并使用 `@Autowired` 注解在 Spring 容器中注入它。 4. **代理配置:**由于 OpenFeign 使用代理,需要在调用远程方法之前进行代理处理。 5. **方法映射:**在方法调用过程中,Spring MVC 注解解析并生成 API,并最终发起客户端调用。 **关键概念:** * **@Import:**允许使用 `@Autowired` 等注解轻松地将第三方依赖注入到 Spring 容器中。 * **FeignClientsRegistrar:**负责配置 Feign 客户端,并解析配置。 * **FactoryBean:**提供接口类的实例,方便 Spring 容器进行注入。 * **代理:**OpenFeign 使用代理机制,将远程调用代理到本地处理器。 * **方法映射:**Spring MVC 通过注解解析并生成 API,并最终调用远程服务器。

正文

此篇文章不从源码角度解析,网上一搜一大把。我个人的习惯是自己评估与思考下大概的设计思路是什么,然后看源码与博客佐证。否则一来就是使用然后看源码,一坨一坨的代码,真的看的头疼。以上仅是个人的学习方法。

聊聊OpenFeign,其实这个框架,之前用过,但没留意太多;说白了这个框架的出现就是为了让我们做RPC调用时偷个懒,是的,程序猿到了一定的境界都是想着偷懒。

OpenFeign是集成到了Spring Cloud基于Feign框架实现调用的,因此主要就是Spring容器如何管理Feign中关键对象的问题了。其实说白了最关键的就是这个。任何的原生框架只要集成到Spring框架中,就一定要解决这个问题。

从使用来看,OpenFeign只是定义了两个注解,而且注解还是标注在接口上,没任何的实现类,这妥妥的偷懒神器!因此要集成到Spring中,就需要考虑这些接口的问题了。

比如我有一个DemoController,接口是DemoClient。

那么如何在DemoController中调用DemoClient接口的方法是直接可以通过Spring容器的@Autowired注解解析而后调用接口方法呢?感觉有点熟悉,是的Mybatis集成到Spring,也是一样的。一个Mapper接口,然后就是一堆的方法,加上注解,在Controller中一调用@Autowired注解,得,直接返回成型的数据了。其实这两原理是一样的。

前面大概梳理了下思路,当然只是一部分。但也是最最关键的一个入口。

OpenFeign通过@Import注解引入实现了ImportBeanDefinitionRegister接口的FeignClientsRegistrar类;该类会初始化以及解析相应的配置。比如是否启用,哪些接口标识了要进行RPC调用的等。

OpenFeign定义了FactoryBean工厂实现接口类在Spring容器中的注入;

以上最关键的集成动作其实就是做完了的。如此,Feign其实就算集成进来了。

接下来就是实际的调用。

DemoClient是一个接口,我们实际调用的时候是接口中的某个方法。因此,就需要在调用方法是拦截,走代理的方式在调用处理器中加入逻辑。这个逻辑就是方法API与方法处理器的映射。

比如我调用DemoClient的hello方法,其实就是在调用远程服务的/xxx/hello  API。因此需要拦截调用。把Spring MVC上的注解逻辑解析生成调用的API,最后发起客户端调用。

而客户端调用的逻辑是什么?不就是HttpClient的Get与Post调用了么!将客户端调用抽象为一个Client,按业务场景可以有不同的实现,比如默认使用JDK自带的HttpUrlConnection、或是第三方的OkHttp、HttpClient、以及负载均衡后的调用。

泳道图如下

 

与聊聊我认为的OpenFeign相似的内容:

聊聊我认为的OpenFeign

此篇文章不从源码角度解析,网上一搜一大把。我个人的习惯是自己评估与思考下大概的设计思路是什么,然后看源码与博客佐证。否则一来就是使用然后看源码,一坨一坨的代码,真的看的头疼。以上仅是个人的学习方法。 聊聊OpenFeign,其实这个框架,之前用过,但没留意太多;说白了这个框架的出现就是为了让我们做R

聊聊我认为的分布式、集群实现关键点

基于常见的中间件(Mysql、ElasticSearch、Zookeeper、Kafka、Redis)等分布式集群设计的机制,自己总结了在在集群设计过程中需要考虑的通用问题。 ### 节点通信机制 主节点的增加、删除、通信机制。 ### 路由算法 即数据路由到哪个节点的策略机制。在集群内有多个节点,

坚持与确定性:毒药还是良药?

前段时间跟几个大龄程序员一起吃饭,聊了大家的现状,后来写了篇博客总结了一下《从大龄程序员现状聊聊出路》,本想着给朋友们提供些观点和思路,结果被有些网友批评了。 1. 我的认知达不到赚快钱 有的网友认为我在瞎扯,有的觉得我在灌鸡汤,还有的认为我在指错路。 文中虽然总结了一些自认为有价值的观点,本想着让

聊聊Spring IOC容器的注入方式

为什么要说这个? 对于Spring体系而言,我个人认为最重要的就是IOC容器,其次才是AOP、Context等模块;因为这些模块功能是或搭建或集成在IOC容器这个基础设施之上的。 直接基于Spring框架体系做开发时,可以通过常用的JavaConfig或XML方式将对象的生命周期及装配由容器原生的接

[转帖]聊聊我对 GraphQL 的一些认知

https://www.modb.pro/db/139451 作者简介:haohongfan 是 Apache Dubbogo Committer,目前就职于京东,擅长高并发架构设计。公众号 HHFCodeRv 会定期发布原创文章,包括源码分析、业务思考、架构设计等。推荐大家关注 每隔一段时间就能看

[转帖]数据库的可观测性能力与监控能力建设之间的差别

白鳝的洞穴2023-04-18 39 前阵子的DTC2023上,我分享的内容是关于数据库可观测性的。会后有不少朋友都和我聊了关于数据库可观测性的问题,也有很多朋友对于这个新名词感到有点高大上,不过并不以为然。认为可观测性就是以前的数据库监控的炒冷饭。实际上从数据库监控到利用数据库的可观测性能力去做数

聊聊一个差点被放弃的项目以及近期的开源计划

前言 自从 StarBlog 和 SiteDirectory 之后,我还没写新的关于开源项目的系列,最近又积累了很多想法,正好写一篇博客来总结一下。 关于差点被放弃的项目,就是最近一直在做的单点认证(IdentityServerLite) IdentityServerLite 开发这个项目的起因,是

17岁中专女生勇夺2024阿里全球数学赛12名好成绩,今天,站在程序员的视角,我们来聊聊数学对编程的价值与意义...

大家好,我是程序员陶朱公,一个认真生活,总想超越自己的程序员。 前言 相信这两天,大家都刷屏到了一个比较热度的新闻——17岁中专女生在今年这届阿里举办的全球数赛中,勇夺第12名的好成绩。 ↓↓↓ 看到这里,可能有小伙伴会觉得有点疑惑:又不是第一名,不明白第12名的她,为什么会引起社会这么大的一个反响

【实践篇】教你玩转JWT认证---从一个优惠券聊起

关于JWT,可以说是分布式系统下的一个利器,我在我的很多项目实践中,认证系统的第一选择都是JWT。它的优势会让你欲罢不能,就像你领优惠券一样。

浅聊一下 C#程序的 内存映射文件 玩法

## 一:背景 ### 1. 讲故事 前段时间训练营里有朋友问 `内存映射文件` 是怎么玩的?说实话这东西理论我相信很多朋友都知道,就是将文件映射到进程的虚拟地址,说起来很容易,那如何让大家眼见为实呢?可能会难倒很多人,所以这篇我以自己的认知尝试让大家眼见为实。 ## 二:如何眼见为实 ### 1.