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
生成Reques
t,然后把Request
交给Client
处理。这里指的
Client
可以是JDK
原生的URLConnection
、Apache
的HTTP Client
、OkHttp
。最后
Client
被封装到LoadBalanceClient
类,结合Ribbon
负载均衡发起服务间的调用。