Hystrix

断路器:避免了服务雪崩的问题。

在分布式系统中,服务与服务之间的相互依赖调用错综复杂

可能出现某个服务因为一些异常或者调用超时

从而长时间线程阻塞,导致整个系统出现雪崩问题。

Hystrix提供了熔断器的功能,执行fallback方法,快速返回一个友好提示,这样可以避免长时间线程阻塞(这种叫做服务降级)

Hystrix有什么功能?

防雪崩(整个调用链路被拖垮),具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)

什么是服务熔断? 什么是服务降级?

服务降级是服务内部出现异常,每个请求都会触发服务降级,执行fallback方法,返回一个友好提示

服务熔断是具有周期性的,在一定时间内,服务请求失败次数达到一个阈值时,会触发熔断打开

熔断打开之后,所有的请求都会执行fallback方法,返回一个有好的提示

一个周期过后,会再次判断是否打开或关闭熔断

我们来实现一个在SpringCloud集成Hystrix,以及访问Hystrix可视化界面案列

spring cloud版本为Greenwich.SR3

spring-boot版本为2.1.9.RELEASE

1.在消费者服务项目工程的pom.xm引入依赖

org.springframework.cloud    spring-cloud-starter-netflix-hystrixorg.springframework.cloud    spring-cloud-starter-netflix-hystrix-dashboard

2.启动类加上注解

@EnableCircuitBreaker//开启对hystrix熔断机制的支持

@EnableHystrixDashboard//hystrix的可视化界面




如何在springcloudalibaba中实现服务降级和熔断_谷歌浏览器


3.启动类中加上这个


如何在springcloudalibaba中实现服务降级和熔断_线程阻塞_02


/**
 * hystrix仪表盘
 * @return
*/
@Bean
public ServletRegistrationBean getServlet(){
 HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
 ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
 registrationBean.setLoadOnStartup(1);
 registrationBean.addUrlMappings("/hystrix.stream");
 registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}

4.在controller层中的方法上加上@HystrixCommand,不然被无法出现仪表盘


如何在springcloudalibaba中实现服务降级和熔断_线程阻塞_03


5.启动项目,先访问http://localhost:8201/hystrix 8201是消费者服务的端口号

一定要记得使用谷歌浏览器,不用谷歌浏览器简直会把你气死,不用谷歌浏览器不配玩代码


如何在springcloudalibaba中实现服务降级和熔断_spring_04


6.特别要注意我第一个框里输入的东西,http://localhost:8201/hystrix后面加了个 .stream, 然后点击按钮


如何在springcloudalibaba中实现服务降级和熔断_谷歌浏览器_05


7.去另一个地址栏访问一下带有@HystrixCommand这个注解的接口

比如我访问 http://localhost:8201/dept/list,回到步骤6的那个页面,可以看到


如何在springcloudalibaba中实现服务降级和熔断_spring_06