Feign

月伴飞鱼 2024-12-15 21:02:01
框架相关
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!

Feign 是一个HTTP请求调用的轻量级框架。

项目地址:https://github.com/OpenFeign/feign

Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上。

  • 进而转化成真正的 Request 请求。

@FeignClient

@FeignClient用于通知Feign组件对该接口进行代理(不需要编写接口实现),使用者可直接通过@Autowired注入。

SpringCloud应用在启动时,Feign会扫描标有@FeignClient注解的接口,生成代理,并注册到Spring容器中。

  • 生成代理时Feign会为每个接口方法创建一个RequetTemplate对象。

该对象封装了HTTP请求需要的全部信息,请求参数名、请求方法等信息都是在这个过程中确定的。

运行原理

在启动类上加上 @EnableFeignClients 注解,开启对 Feign Client 扫描加载。

在启用时,会进行包扫描,扫描所有的 @FeignClient 的注解的类,并将这些信息注入 Spring IOC 容器。

当定义的Feign 接口中的方法被调用时,通过 JDK 的代理方式,来生成具体的 RestTemplate

当生成代理时,Feign 会为每个接口方法创建一个 RestTemplate 对象,该对象封装了 HTTP 请求需要的全部信息。

  • 如:参数名、请求方法、Header等。

然后由 RestTemplate 生成 Request,然后把 Request 交给 Client 处理。

这里指的 Client 可以是 JDK 原生的 URLConnectionApacheHTTP ClientOkHttp

最后 Client 被封装到 LoadBalanceClient 类,结合 Ribbon 负载均衡发起服务间的调用。

58f476fda1f6057d88ce9b8f88e4db01
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!