怎么在springcloud中使用Hystrix对微服务进行降级管理

  介绍

这期内容当中小编将会给大家带来有关怎么在springcloud中使用Hystrix对微服务进行降级管理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强>一:Hystrix是什么?

<强> 1.1:基本解释

Hystrix最开始由Netflix(看过美剧的都知道,它是一个美剧影视制作的巨头公司)开源的,后来由春云Hystrix基于这款框架实现了断路器,线程隔离等一系列服务保护功能,该框架的目标在于通过控制访问远程系统,服务和第三方库的节点,从而延迟和故障提供更强大的容错能力.hystrix具备服务降级,服务熔断,线程和信号隔离,请求缓存,请求合并以及服务监控等强大功能。起到了微服务的保护机制,防止某个单元出现故障。从而引起依赖关系引发故障的蔓延,最终导致整个系统的瘫痪。

<强> 1.2:断路器的概念

断路器本身是一个开关装置,用在电路上保护线路过载,当线路中有电器发生短路的时候。”断路器”能够及时切断故障,防止发生过载,发热甚至起火等严重后果。当分布式架构中,断路器模式起到的作用也是类似的。当某个服务发生故障的时候,通过断路器的故障监控向调用方返回一个错误响应,而不是长时间的线程挂机,无限等待。这样就不会使线程因故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。如下图是现实中的断路器,它是一个开关装置:

怎么在springcloud中使用Hystrix对微服务进行降级管理

<强>二:Hystrix解决超时问题

<强> 2.1:问题

假设我们前端提供了用户查询订单的功能,首先请求映射到OrderController,控制器通过调用服务orderService获取订单信息,前端传过来两个参数:一个是订单id,一个是用户id, orderService需要通过用户id调取用户服务来获取用户的相关信息返回给订单服务去组装信息,假设这里是通过http请求的,我们有一个单独的工程叫做:userService部署在其他的服务器上。但是这个服务器宕机了,这时候订单服务调取用户信息就失败了,然后查询订单整个请求就失败了!由一个服务的宕机就导致整个查询都失败了,牵一发而动全身。流程见下图:

怎么在springcloud中使用Hystrix对微服务进行降级管理

<强> 2.2:使用Hystrix进行服务降级

2.2.1:引入Hystrix依赖这里引入了spring-cloud-starter-netflix-hystrix, springboot的起动器里面整合了Hystrix

& lt; properties>   ,,,& lt; java.version> 1.8 & lt;/java.version>   ,,,& lt; spring-cloud.version> Greenwich.SR1   & lt;才能/properties>      & lt;才能dependencies>   ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.cloud   ,,,,,& lt; artifactId> spring-cloud-starter-netflix-hystrix   ,,,& lt;/dependency>   ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.cloud   ,,,,,& lt; artifactId> spring-cloud-starter-netflix-hystrix-dashboard   ,,,& lt;/dependency>      ,,,& lt; dependency>   ,,,,,& lt; groupId> cn.hutool   ,,,,,& lt; artifactId> hutool-all   ,,,,,& lt; version> 4.5.1   ,,,& lt;/dependency>      ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.boot   ,,,,,& lt; artifactId> spring-boot-starter-test   ,,,,,& lt; scope> test   ,,,& lt;/dependency>   & lt;才能/dependencies>      & lt;才能dependencyManagement>   ,,,& lt; dependencies>   ,,,,,& lt; dependency>   ,,,,,,,& lt; groupId> org.springframework.cloud   ,,,,,,,& lt; artifactId> spring-cloud-dependencies   ,,,,,,,& lt; version> $ {spring-cloud.version} & lt;/version>   ,,,,,,,& lt; type> pom   ,,,,,,,& lt; scope> import   ,,,,,& lt;/dependency>   ,,,& lt;/dependencies>   & lt;才能/dependencyManagement>

2.2.2:模拟订单请求

首先通过OrderController映射/订单请求,获取前端传入的参数orderId和useId,然后调用orderDetailService方法,

@RestController   public  class  OrderController  {      ,@   private 才能;OrderService  orderService;         ,/* *   ,,*,获取订单信息   ,,*   ,,*,@param  orderNo   ,,* @return   ,,*/@PostMapping才能(“/order")   public 才能;ResultVo< OrderDetail>, getOrderInfo (@RequestParam (“orderId"), Long  orderNo,, @RequestParam (“userId"), Long  userId), {      ,,,OrderDetail  OrderDetail =, orderService.orderDetailService (orderNo, userId);   ,,,ResultVo  ResultVo =, new  ResultVo

怎么在springcloud中使用Hystrix对微服务进行降级管理