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的可视化界面
3.启动类中加上这个
/**
* 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,不然被无法出现仪表盘
5.启动项目,先访问http://localhost:8201/hystrix 8201是消费者服务的端口号
一定要记得使用谷歌浏览器,不用谷歌浏览器简直会把你气死,不用谷歌浏览器不配玩代码
6.特别要注意我第一个框里输入的东西,http://localhost:8201/hystrix后面加了个 .stream, 然后点击按钮
7.去另一个地址栏访问一下带有@HystrixCommand这个注解的接口
比如我访问 http://localhost:8201/dept/list,回到步骤6的那个页面,可以看到