首页 > 其他分享 >聊聊我认为的OpenFeign

聊聊我认为的OpenFeign

时间:2023-05-16 20:36:56浏览次数:34  
标签:集成 调用 OpenFeign Spring 接口 认为 聊聊 注解

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

聊聊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调用了么!

泳道图如下

 

标签:集成,调用,OpenFeign,Spring,接口,认为,聊聊,注解
From: https://www.cnblogs.com/zhiyong-ITNote/p/17406709.html

相关文章

  • ALLEGRO保存文件时提示被锁定了,但实际上是没有认为的设置密码,要怎么解锁呢?
      如果以上方法不行那就点下面这个再试试还有一个点需要注意,在PCB文件夹下面会有一个LCK的文件,把这个文件删了就能正常保存了 3.这里做个说明 ......
  • Java网络编程----通过实现简易聊天工具来聊聊BIO
    IO模型即输入输出模型,我们今天主要来聊的是java网络编程中的IO模型---BIO模型。BIO即阻塞式IO,BlockingIOblocking[ˈblɒkɪŋ]v. 堵塞;阻塞;堵住(某人的路等);挡住(某人的视线等);妨碍;阻碍;那究竟什么是阻塞呢?这里的阻塞和多线程并发控制中,对未持有锁的线程进行同步阻......
  • 聊聊 to 大B 和 toG 的产品,确实……很难
    经常被问:我们是给政府做项目的,作为产品经理有前途么?我在传统企业的IT部门做产品,好像完全没有主动权?我们的客户太强势了,根本油盐不进……我的观点是:真产品经理得有决策权,纯执行就是需求分析师。如果出现甲乙方关系,则甲方越大,决策权越在甲方,而通常这个时候的甲方也更加专业,所以这时候......
  • 2023-05-15:对于某些非负整数 k ,如果交换 s1 中两个字母的位置恰好 k 次, 能够使结果字
    2023-05-15:对于某些非负整数k,如果交换s1中两个字母的位置恰好k次,能够使结果字符串等于s2,则认为字符串s1和s2的相似度为k。给你两个字母异位词s1和s2,返回s1和s2的相似度k的最小值。输入:s1="abc",s2="bca"。输出:2。答案2023-05-15:解题思路:定......
  • 聊聊垃圾回收机制
    引入当解释器再执行到定义变量的语法时,会申请内存空间来存放变量的值,但是内存的容量时有限的,当你不需要该变量值时它仍然会占用你的内存空间,这就设计到了‘垃圾’的回收问题,当一个变量值没有用后我们应该将其回收掉以释放内存。单从逻辑层面分析,我们定义变量的值存起来......
  • 打卡5.8——委派认为问题
    1.问题描述某项任务需要在A、B、C、D、E、F这6个人中挑选人来完成,但挑选人受限于以下的条件:(1)A和B两个人至少去一人;(2)A和D不能同时去;(3)A、E和F三人中要挑选两个人去;(4)B和C同时去或者都不去;(5)C和D两人中只能去一个;(6)如果D不去,那么E也不去。试编程求出应该让哪几个人......
  • 聊聊那些年我们实现java AOP几种常见套路
    前言有一定开发经验的同学对AOP应该很了解吧,如果不了解,可以先查看如下文章进行科普一下https://baike.baidu.com/item/AOP/1332219?fr=aladdin,再来阅读本文。示例前置准备注:本示例基于springboot进行演示1、在项目pom引入aop的GAV<dependency><groupId>or......
  • 聊聊怎样快速去阅读JDK源码?
    1.前言之前断断续续读过一部分JDK常用类的源码,这里想把过程中的一些心得和方法记录下来,如果能帮到需要的小伙伴就再好不过了!本文主要分享一下我的阅读工具和阅读顺序。PS:由于当前主流使用的JDK版本仍是1.8,因此源码阅读主要是1.8版本,有些地方可以参考1.7。2.工具......
  • 聊聊关于,SpringBoot写后端接口
    前言:一个后端接口大致分为四个部分组成:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)。如何构建这几个部分每个公司要求都不同,没有什么“一定是最好的”标准,但一个优秀的后端接口和一个糟糕的后端接口对比起来差异还是蛮大的,其中最重要的关键点就是......
  • 从0开始搭建一个微服务项目(使用openfeign)
    本文发布时间:2023-05-05尚在学习当中,如有不足,请指正!!!项目结构本篇文章是之前项目的后续版本,前面的内容可看链接:从0开始搭建一个微服务项(并注册到nacos)_bgbgking的博客-CSDN博客因本篇内容较前篇跨幅较大,有兴趣可查看源码链接:spring-cloud-demo:springcloud基础架构及其......