SpringCloud(三)- Feign和Hystrix
Feign
feign是一个声明式的webService客户端,使用feign可以让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解,Feign也支持可插拔式的编码器和解码器,Spring Cloud对Feign进行了封装,使其支持了Spring MVC注解和HttpMessageConverters。Feign可以与Eureka和Feign组合使用以支持负载均衡。这样设计是为了支持面向接口编程,类似于Mybatis的Mapper。
Feign的使用
- 导入依赖
- 开启Feign支持
- 新建接口,接口上注解@FeignClient(value=“服务名字”)
- 注入feign接口
为什么要使用Feign
之前使用Ribbon + RestTemplate时,使用RestTemplate对http请求封装处理,形成了一套模板化的调用方法,但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多次调用,所以通常针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用,所以feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义,在feign的实现下,我们只需要创建一个接口并使用注解方式来配置它,即可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon时自动封装微服务调用客户端的开发量。
feign集成了Ribbon,利用Ribbon维护了服务列表信息,并通过轮询的方式实现了客户端的负载均衡,
feign的两大注解:
- @FeignClient(“服务名”) 配置服务接口,接口上配置@RequestMapping映射对应的url
- @EnableFeignClients 开启对feign的支持
Hystrix
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免地会调用失败,比如超时,异常等,Hystrix能保证在一个依赖出现问题时,不会导致整体服务失败,避免了级联故障,以提高分布式系统的弹性,比如向调用方返回一个符合预期的,可处理的备选响应(Fallback),而不是长时间地等待或抛出调用方无法处理的异常。
服务雪崩
服务雪崩是多个微服务之间调用时,假设微服务A调用B,C,B和C又调用其他微服务,这就是所谓的扇出,如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对A的调用就会占用越来越多的系统资源进而引起系统崩溃。
服务熔断和服务降级
应对雪崩效应的一种链路保护机制
- @HystrixCommand(fallback = “对应的处理方法”) 标记一个接口处理方法
- @EnableCircuitBreaker 开启Hystrix的支持
整体资源不够用了,就挂掉部分服务,待资源足够,再开启回来,这个操作是在客户端完成的
将熔断操作和业务操作解耦
- 新建一个处理工厂类,实现FallbackFactory<业务接口.class>接口,注意这个类上添加@component。
- 在FeignClient注解上添加fallBackFactory属性
- 配置application.yml
feign:
hystrix:
enabled: true
hystrixDashboard
准实时地调用监控,会持续记录所有通过Hystrix发起的请求执行信息,并以统计报表和图形的形式展示给用户
- @EnableHystrixDashboard开启监控支持
- 访问http://localhost:9001/hystrix.stream,将需要的信息复制到http://localhost:9001/hystrix
|