Feign学习总结!
Feign学习总结!
月伴飞鱼
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原生的URLConnection、Apache的HTTP Client、OkHttp。最后
Client被封装到LoadBalanceClient类,结合Ribbon负载均衡发起服务间的调用。










