面试官:OpenFeign十大可扩展组件你知道哪些?

简介: 这篇文章是关于OpenFeign框架的可扩展组件的讨论,作者分享了自己在面试中遇到的相关问题,并回顾了OpenFeign源码,列出了十大组件,包括日志、解码器、重试组件等,并展示了如何使用FeignClient注解和@EnableFeignClients注解来实现远程RPC调用。

一个朋友最近去面试美团,问了一个这样的题目,OpenFeign十大可扩展组件有哪些,虽然看过OpenFeign的源码,但是要我说出10个组件,我还是很难说全,记忆最深的只有 1、日志,2、解码器,3、重试组件,其他的想不起来了。

image.png

今天我回顾了下源码,之前看的没有好好记录下来,还是要拿个小本本记下来呀。现在我就把复习OpenFeign原理的过程记录下来。

image.png

先找到我之前写的feign调用demo项目

1、这是之前学习openfeign源码写的demo,客户端接口使用FeignClient注解标记,记得添加jar依赖 spring-cloud-starter-netflix-eureka-client

@FeignClient(contextId = "feignServer", name = "feignServer")
public interface FeignClientApi {
   
   

@GetMapping("/hello/feign")
String hello();
}
AI 代码解读

2、启动类使用EnableFeignClients注解标记开启feign功能


@SpringBootApplication(scanBasePackages = {
   
   "cn.supfox"}, exclude = DataSourceAutoConfiguration.class)
@EnableEurekaClient
@EnableFeignClients(basePackages = {
   
   "cn.supfox"})
public class EurekaClientApp {
   
   
public static void main(String[] args) {
   
   
    SpringApplication.run(EurekaClientApp.class, args);
}
}
AI 代码解读

3、写一个http接口调用FeignClientApi发起远程rpc调用,debug启动开始debug


@RestController
public class FeignTestController {
   
   

@Autowired
private FeignClientApi feignClientApi;

@GetMapping( "/test/feign")
public String get() {
   
   
    return feignClientApi.hello();
}
}
AI 代码解读

4、使用postman触发,查看feignClientApi对象信息

image.png

上面的feignClientApi对象变成了一个$Proxy对象,没错OpenFeign使用到了Jdk动态代理技术来实现面向接口式的远程rpc调用 image.png

FeignInvocationHandler就是生成Jdk动态代理必须实现的接口InvocationHandler子类

FeignInvocationHandler类就负责处理代理请求的逻辑,它把请求转发给dispatch处理。dispatch默认使用SynchronousMethodHandler来处理,从SynchronousMethodHandler的属性组成就可以看到OpenFeign的十大组件。根据对象结构我整理出一个图,里面就有我们常用的重试器组件,解码组件,日志组件。

image.png

这十个组件是真的优秀啊,他们都是可以被我们扩展的,即我们可以选择他的默认实现,也能自己实现他的接口替换默认实现,实力真的强。

image.png

既然看到这里了

image.png

学习这种框架有好的思路或者画图有好的路子的兄弟们可以评论区留言分享下哦,学习之路不易,感之不尽...

目录
打赏
0
1
1
0
41
分享
相关文章
【Vue面试题十】、Vue中组件和插件有什么区别?
这篇文章阐述了Vue中组件和插件的区别,指出组件主要用于构建应用程序的业务模块,而插件用于增强Vue本身的功能,两者在编写形式、注册方式和使用场景上有所不同。
【Vue面试题十】、Vue中组件和插件有什么区别?
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
9997 6
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
【Vue面试题十一】、Vue组件之间的通信方式都有哪些?
这篇文章介绍了Vue中组件间通信的8种方式,包括`props`传递、`emitrefEventBusparent`或`$root`、`attrs`与`listeners`、`provide`与`inject`以及`Vuex`,以解决不同关系组件间的数据共享问题。
面试题Kafka问题之RabbitMQ的扩展和二次开发如何解决
面试题Kafka问题之RabbitMQ的扩展和二次开发如何解决
66 1
面试题分享之封装一个弹框组件
面试题分享之封装一个弹框组件
50 0
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
89 1
SpringCloud面试之流量控制组件Sentinel详解
SpringCloud面试之流量控制组件Sentinel详解
353 0
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
84 0

热门文章

最新文章