三丰 soft张三丰spring
Feign 的英文表意为“伪装,假装,变形”, 是一个http请求调用的轻量级框架,能够以Java接口注解的方式调用Http请求,而不用像Java中经过封装HTTP请求报文的方式直接调用。Feign经过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。编程
在服务调用的场景中,咱们常常调用基于Http协议的服务,而咱们常常使用到的框架可能有HttpURLConnection、Apache HttpComponnets、OkHttp3 、Netty等等,这些框架在基于自身的专一点提供了自身特性。而从角色划分上来看,他们的职能是一致的提供Http调用服务。具体流程以下:架构
feign.hystrix.enabled=false feign的调用过程当中是否启用hystrix,默认false feign.httpclient.enabled=ture 是否使用httpclient来调用接口,默认true;要使用httpclient还须要引入feign-httpclient依赖 feign.okhttp.enabled=false 是否使用okhttp来调用接口,默认false;要使用okhttp需把改属性设为true,还须要引入feign-httpclient依赖负载均衡
1.启动类使用的注解不一样,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。框架
2.服务的指定位置不一样,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。ide
3.调用方式不一样,Ribbon须要本身构建http请求,模拟http请求而后使用RestTemplate发送给其余服务,步骤至关繁琐。微服务
Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将须要调用的其余服务的方法定义成抽象方法便可, 不须要本身构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法彻底一致。编码
1.Feign调用其余微服务API时可使用统一的HTTPZ请求模板,包含请求参数,URL等信息,便于管理维护。Ribbon的请求经过RestTemplate调用其余微服务API,参数经过字符串拼接在URL后面,不方便写也不利于管理。blog
2.Spring Cloud为Feign提供了支持Spring MVC的注解,能够经过注解方便使用。接口
3.可插拔的注解支持,包括Feign注解和JAX-RS注解。
4.支持可插拔的HTTP编码器和解码器。
5.支持HTTP请求和响应的压缩处理。
6.Feign支持Hystrix和他的回退功能
7.Feign支持Ribbon的负载均衡功能