目录
-
定义
Feign是声明式Web Service客户端,它让为服务之间的调用变得简单,符合开发人员面向接口编程的习惯,类似controller 调用service,帮助我们更加快捷、优雅地调用HTTP API。
-
实现原理
Feign远程调用,核心就是通过一系列的封装和处理,将以JAVA注解的方式定义的远程调用API接口,最终转换成HTTP的请求形式,然后将HTTP的请求的响应结果,解码成JAVA Bean,返回给调用者。
-
工作步骤
- 启动时,程序会进行包扫描,扫描所有包下所有@FeignClient注解的类,并将这些类注入到spring的IOC容器中。当定义的Feign中的接口被调用时,通过JDK的动态代理来生成RequestTemplate。
- RequestTemplate中包含请求的所有信息,如请求参数,请求URL等。
- RequestTemplate生成Request,然后将Request交给client处理,这个client默认是JDK的HTTPUrlConnection,也可以是OKhttp、Apache的HTTPClient等。
- 最后client封装成LoadBalanceClient,结合ribbon负载均衡地发起调用。
-
特性
- 支持可插拔注解支持(包括Feign注解和JAX-RS注解)
- 支持可插拔编码器和解码器
- 集成了Ribbon和Eureka,是一种提供负载均衡的http客户端
-
Reference
- spring官方文档
https://spring.io/projects/spring-cloud-netflix
- 【狂神说Java】SpringCloud最新教程IDEA版
https://www.bilibili.com/video/BV1jJ411S7xr
- 微服务实战SpringCloud之Feign简介及使用