面试官:说说Spring Cloud Feign工作原理

一、Feign 的工作原理

Spring Cloud Feign 是一个声明式的 Web 服务客户端,它使得编写 Web 服务客户端变得非常容易。它是基于 Netflix Feign 开发的,是一个轻量级的 RESTful HTTP 客户端。

让我们来看一下 Feign 的工作原理:

  • 声明式 REST 客户端: Feign 提供了一种更简单的方法来定义和创建 REST 客户端。通过创建接口并用注解来配置请求,开发者可以非常容易地定义服务端点。

  • 集成 Ribbon 和 Hystrix: Feign 自然集成了 Ribbon(负载均衡器)和 Hystrix(断路器),这意味着在使用 Feign 时,您可以非常容易地实现服务的负载均衡和容错。

  • 注解支持: Feign 使用注解如 @FeignClient 来声明一个接口是一个 Feign 客户端,这个注解包含了服务的名称和配置信息。通过注解 @RequestMapping 或 @GetMapping 等,您可以定义请求的 URL、方法类型等。

  • 动态代理: 当您定义一个 Feign 客户端接口时,Feign 使用动态代理来生成实现。这个实现内部处理了 HTTP 请求的发送和结果的映射。

  • 请求和响应的处理: Feign 内部使用了 HttpClient 来发送 HTTP 请求,并且会自动处理请求和响应。您可以使用不同的编码器和解码器来处理请求和响应的数据格式。

  • 易于扩展: Feign 提供了多种插件,例如编码器、解码器、拦截器等,这些都可以用来自定义 Feign 的行为。

二、@FeignClient注解工作原理

@FeignClient 注解的工作原理是在运行时动态创建带注解接口的代理。该接口中的每个方法对应于对注释中指定的服务的 HTTP 请求。当调用该接口的方法时,Spring会拦截该调用并将其转换为HTTP请求,包括URL映射、请求和响应正文转换以及标头设置。然后,它将请求发送到目标服务,处理响应,并将其作为方法的返回值返回。

三、@FeignClient源码解析

  1. 获取客户端名称

源码中可以看到类FeignClientsRegistrar的方法registerFeignClients注册客户端

  1. 获取configuration

接着就是将configuration中的配置类加载到BeanDefinitionRegistry中了

  1. 注册客户端

接着就是registerFeignClient 注册客户端了,首先会将注解属性添加到definition

最后Feign接口注册到了注册器中,名称为包名+接口名,Feign接口实际生成的Bean对象为FeignClientFactoryBean

相关推荐
ModelBulider几秒前
十四、SpringMVC的执行流程
java·开发语言·后端·spring·springmvc
喜欢猪猪18 分钟前
Spring Boot开箱即用可插拔实现过程演练与原理剖析
java·spring boot·后端
AskHarries1 小时前
Spring Boot集成ShedLock实现分布式定时任务
java·spring boot·后端
杨荧1 小时前
【开源免费】基于Vue和SpringBoot的实习管理系统(附论文)
java·前端·javascript·vue.js·spring boot·spring cloud·java-ee
AliCloudROS1 小时前
在阿里云快速启动Appsmith搭建前端页面
后端
Xiaoyu Wang1 小时前
Go八股(Ⅴ)map
开发语言·后端·golang
2401_857600952 小时前
汽车科技前沿:Spring Boot资讯快车道
spring boot·后端·汽车
宝宝1.03 小时前
Spring Boot出现java: 错误: 无效的源发行版:16的解决方式
java·spring boot·后端
2401_854391083 小时前
Spring Boot汽车资讯:科技与速度的交响
spring boot·后端·科技