实战系列-被面试官问到Feign原理

本文通过分析源码详细介绍了Spring Cloud Feign的工作原理,包括@EnableFeignClients注解的作用,FeignClientsRegistrar的注册逻辑,以及Feign客户端组件如FeignInvocationHandler和MethodHandler的工作方式。同时,文章探讨了Feign客户端组件如Client.Default、ApacheHttpClient和OkHttpClient的实现,并概述了Feign的远程调用执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导语
  事情是这样的,昨天参加了某公司二面,被面试官问道了Spring Cloud的RESTFul远程调用。项目上用到的技术就是OpenFeign,面试官可能自己不是太了解,给他解释一番发现自己还有很多的细节也不是太清楚,下面就来结合OpenFeign的源码来分析一下

  Feign远程调用,核心就是通过一系列的封装和处理,将以JAVA注解的方式定义的远程调用API接口,最终转换成HTTP的请求形式,然后将HTTP的请求的响应结果,解码成JAVA Bean,放回给调用者。

  在使用的时候我们必不可少的两个注解@FeignClient和@EnableFeignClients两个注解,一个是开启Feign功能@EnableFeignClients ,一个是作为客户端应用注入@FeignClient。

@EnableFeignClients注解

  这个注解跟一般的注解无异,唯一不一样的地方就是使用@Import注解,我们知道@Import注解是向容器中注入一些其他的或者第三方的对象,可以理解为外部的操作通过Import的方式引入进来,既然是这样,那就要研究一下这个引入的类。FeignClientsRegi

### Feign 常见面试问题及答案 #### 1. Feign 是什么? Feign 是一种声明式的 Web Service 客户端,它使得编写 HTTP API 的客户端变得更加简单。开发者只需创建一个接口并用注解来配置即可[^2]。 #### 2. Feign 如何实现请求拦截功能? Feign 支持请求拦截器的功能,可以通过实现 `RequestInterceptor` 接口,在发送请求前添加自定义逻辑。例如可以用来设置公共的请求头或者对请求参数进行加密等操作。具体实现方式如下所示: ```java @Configuration public class FeignConfig { @Bean public RequestInterceptor headerInterceptor() { return template -> { template.header("Key", "Value"); // 添加自定义头部 // 可以在此处加入其他自定义逻辑 }; } } ``` 上述代码展示了如何通过 Feign 配置类注入一个拦截器 Bean 来完成请求拦截的任务。 #### 3. Spring Cloud 中断路器的作用是什么? Spring Cloud 断路器的主要作用是在分布式系统中保护服务调用方免受级联失败的影响。当某个远程服务不可用或响应缓慢时,断路器能够快速返回错误而不是长时间等待,从而提高系统的稳定性和可用性[^1]。 虽然此问题是关于 Spring Cloud 断路器的内容,但在实际开发过程中,如果使用了 Hystrix 或 Resilience4j 等工具作为断路器组件,则可能也会集成到 Feign 请求链路当中去共同发挥作用。 #### 4. 在微服务架构下,Feign 和 RestTemplate 的区别有哪些? 两者都是用于发起 HTTP 调用的技术方案,但它们之间存在一些显著差异: - **编程模型**:RestTemplate 属于命令式风格;而 Feign 则采用的是声明式设计模式。 - **易用程度**:相比手动构建 URL 并拼接参数等方式来说,基于接口定义的服务调用形式更加直观简洁明了。 - **性能表现**:由于内部实现了连接池管理机制等原因,默认情况下 Feign 性能优于 RestTemplate。 #### 5. Provider/Consumer 是否共享某些特定类型的全局设定项? 是的,在实际项目部署期间为了便于维护以及保持一致性原则通常会将诸如服务超时时间、重试策略等相关属性集中存储起来供生产者消费者双方共同访问利用[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nihui123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值