面试官:说说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

相关推荐
码农幻想梦1 小时前
实验五 spring入门及IOC实验
java·后端·spring
a程序小傲1 小时前
蚂蚁Java面试被问:向量数据库的相似度搜索和索引构建
开发语言·后端·python·架构·flask·fastapi
派大鑫wink3 小时前
【Day39】Spring 核心注解:@Component、@Autowired、@Configuration 等
java·后端·spring
Java程序员威哥4 小时前
Java应用容器化最佳实践:Docker镜像构建+K8s滚动更新(生产级完整模板+避坑指南)
java·开发语言·后端·python·docker·kubernetes·c#
源代码•宸4 小时前
Golang原理剖析(defer、defer面试与分析)
开发语言·经验分享·后端·面试·golang·defer·开放编码
南山乐只4 小时前
Java并发原生工具:原子类 (Atomic Classes)
java·开发语言·后端
爱丽_5 小时前
Spring 框架
java·后端·spring
小北方城市网5 小时前
SpringBoot 集成 RabbitMQ 实战(消息队列):实现异步通信与系统解耦
java·spring boot·后端·spring·rabbitmq·mybatis·java-rabbitmq
sunnyday04265 小时前
从混乱到清晰:Maven 依赖版本管理最佳实践
java·spring boot·后端·maven
雨中飘荡的记忆5 小时前
Spring Test 从入门到实战
java·后端·spring