1、Feign 是什么
Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,封装了http调用流程。
2、为什么选择 Feign
如果不使用rpc框架,那么调用服务需要走http的话,无论是使用 JDK 自带的 URLConnection,还是使用Http工具包 Apache 的httpclient, 亦或是 OkHttp, 都需要自行配置请求head、body,然后才能发起请求。获得响应体后,还需解析等操作,十分繁琐。
而Feign 只需要定义一个接口,并且通过注解的形式定义好请求模板,就可以项使用本地接口一样,使用Http请求。
3.Feign原理简述
启动时,程序会进行包扫描,扫描所有包下所有@FeignClient注解的类,并将这些类注入到spring的IOC容器中。当定义的Feign中的接口被调用时,通过JDK的动态代理来生成RequestTemplate。
RequestTemplate中包含请求的所有信息,如请求参数,请求URL等。
RequestTemplate声场Request,然后将Request交给client处理,这个client默认是JDK的HTTPUrlConnection,也可以是OKhttp、Apache的HTTPClient等。
最后client封装成LoadBaLanceClient,结合ribbon负载均衡地发起调用。
总结
Feign 是一个很好的框架工具,把繁琐的 Http 请求,抽象为以接口加注解的方式实现,也使开发者很好的面向接口编程。在目前微服务盛行的当下,Spring 也对 Feign 进行了封装,即OpenFeign.
https://baijiahao.baidu.com/s?id=1663378013405325309&wfr=spider&for=pc