01
前言
通过前面的文章对ribbon与hystrix已经有了初步的认识。学会了如何在微服务的架构中实现实现断路器来保护我们的微服务应用。
以及客户端的负载均衡。
我们在使用中,有的时候会发现这两个框架几乎是同时出现的。我们有这样一个框架整合了ribbon和hystrix。它就是feign。
02
Feign的简单介绍
在之前我们微服务的调用方式是使用restTemplete的请求拦截来实现对依赖服务的接口调用,这是对http的封装处理。我们的feign接口在此基础上做了进一步封装。
我们只需要创建一个接口并用注解的方式来配置它,即可完成对服务接口的绑定,它支持可插拔的注解支持,包括Feign注解和JAX-RS注解。并且扩展了对springmvc的注解支持。还有feign自身的一些组件,包括解码器和编码器,也是以可插拔的方式提供,在有需求的时候我们可以方便的替换和扩展它们。
03
快速入门
我们用springboot搭建一个简单的hello-server服务,然后再创建一个基础工程,我们叫它feign-customer,并在pom中引入eureka和feign依赖。
创建应用类customerApplication,并在启动类上加上注解@EnableFeignClients注解开启支持功能。
定义HelleService接口,通过@FeignClient注解指定服务名来绑定服务。然后再使用spring mvc 的注解例如@RequestMapping来绑定具体该服务的Rest接口。
最后,同ribbon的服务消费一样,需要在配置文件中指定服务注册中心。并定义自身服务名。
04
参数绑定
Feign 的参数绑定也挺简单的,包括带有request参数的请求,带有header消息的请求,带有requestbody的请求,以及请求响应体中是一个对象。我们定义了@RequestParam ,@RequestBody @RequestHeader。
05
其它配置
我们可以使用feign的继承特性。可以将接口的定义从controller中剥离,同时如果配有maven私有 仓库就可以轻易的实现接口的共享,实现在构建期的接口绑定,从而有效的减少服务客户端的绑定配置。
但是这样的做法使用不当的话会带来副总用,由于接口在构建期间就建立起了依赖,那么接口变动就会对项目构建造成影响,可能服务端修改了接口定义,可能导致客户端项目构建失败。
此外feign接口可以配置rebbon和hystrix,并且熔断器设置的时间要大于ribbon重试机制的时间,不然重试就没意义了。并且可以加入服务降级,我们只需要定义一个接口的fallback实现类,并在接口的注解中指定该类,即@FeignClient(name=”hello-server”,fallback=”HelloServiceFallback.class”)
最后feign还提供了请求压缩和日志配置的支持。在请求压缩中支持GZIP的压缩方式。对日志我们只需要在配置文件中开启指定feigin客户端的debug日志。Feign的logger日志有以下4种.:
None:不记录任何日志。
Basic:仅记录请求方法,url以及响应状态码和执行时间。
Heards:除了记录basic级别的日志以外,还记录请求和响应的头信息。
Full:记录所有请求与响应的明细,包括头信息、请求体、元数据等。
领取专属 10元无门槛券
私享最新 技术干货