spring feign

spring feign

三丰 soft张三丰

什么是feign

Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。

Feign解决了什么问题?

封装了Http调用流程,更适合面向接口化的编程习惯

在服务调用的场景中,我们经常调用基于Http协议的服务,而我们经常使用到的框架可能有HttpURLConnection、Apache HttpComponnets、OkHttp3 、Netty等等,这些框架在基于自身的专注点提供了自身特性。而从角色划分上来看,他们的职能是一致的提供Http调用服务。具体流程如下:

spring feign

Feign架构

spring feign

常用参数设置

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依赖

Feign和Ribbon的使用区别

Ribbon和Feign都是用于调用其他服务的,不过方式不同。

1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。

2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。

3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。

Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可, 不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

Feign整合了Ribbon和Hystrix

1.Feign调用其他微服务API时可以使用统一的HTTPZ请求模板,包含请求参数,URL等信息,便于管理维护。Ribbon的请求通过RestTemplate调用其他微服务API,参数通过字符串拼接在URL后面,不方便写也不利于管理。

2.Spring Cloud为Feign提供了支持Spring MVC的注解,可以通过注解方便使用。

3.可插拔的注解支持,包括Feign注解和JAX-RS注解。

4.支持可插拔的HTTP编码器和解码器。

5.支持HTTP请求和响应的压缩处理。

6.Feign支持Hystrix和他的回退功能

7.Feign支持Ribbon的负载均衡功能

上一篇:深入剖析ribbon源码


下一篇:这次要是讲不明白Spring Cloud核心组件,那我就白编这故事了