小白使用Hystrix

Hystrix是什么东西?百度一下:

  没错,hystrix是豪猪的意思,作为SpringCloud微服务系统中保持服务稳定的重要组件,正如它的名字一样,它对整个系统起到了保护的作用。

  在许多文章当中把hystrix描述为熔断器,便于我们结合生活来理解。想象一下,你在家使用了很多的大功率的电器,导致电路的压力很大,当达到

一个临界值的时候,就会跳闸。而在一个庞大的微服务系统中,有几十上百个服务同时运行,如果因为一个服务故障导致整个系统崩溃,这是不可想象的,

所以有了hystrix,用于出现故障的时候提供服务降级,服务熔断,服务监控等手段来保护系统。

  下面我们就来简单的介绍一下hystrix如何使用。

  

  依赖引入

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

  基本在SpringCloud中使用任何一个功能都需要引入依赖,比如服务发现,统一配置,网关,服务追踪等等。

  

  基本使用

  启动类加注解

@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker

  加上注解后我们就可以使用hystrix,这里我提供一个场景:

  现有订单服务和商品服务两个服务,订单服务调用商品服务的商品列表接口,我们通过这个服务之间的调用来看两种hystrix的应用:服务降级和服务熔断。

  先说服务降级,服务降级是什么呢?

  我们去菜市买肉,一开始呢,我想吃牛肉,于是问老板有没有牛肉,老板说没有;然后我降低档次,选择猪肉,还是没有;最后买了鸡肉。这就是一个

降级的过程,老板对我提供服务,当不能满足我的请求的时候,他会告诉我没有。如果没有做服务降级,那么当我问老板的时候,老板直接不鸟我,这种就是

服务态度恶劣,很垃圾的服务。

  对应到微服务体系中,就是说当服务不可用或者出现故障的时候需要有应急措施来响应客户的请求。下面是具体应用,比较简单,先看未使用服务降级的场景:

  

  当两个服务都正常运行的时候,不用说,一点儿问题都没有。然后我们将product服务关闭掉:

  

  直接报500了,这样对普通用户很不友好,又不是每一个人都知道httpcode的含义,那怎么办呢?有人可能会想到根据httpcode定义不同错误提示页面,这也是

一个是思路,但是根据httpcode只能做到把错误抽出来形成几个公共的提示页面,而不能每一个接口都返回不同的提示,针对这个问题,我们就可以使用到hystrix的服务

降级功能了。具体步骤是在要做服务降级的接口上加@HystrixCommand注解,并定义服务降级的方法:

1 private String fallback(int id){
2         return "当前网络繁忙,请稍后再试哦!" + id;
3     }

  在@HystrixCommand注解中指定方法:

  这时候再来看order服务调用product服务:

  出现了我们想要的提示,这样对用户来说,至少比直接返回个错误码或者啥都不返回要强的多吧。。。

  接下来再看看服务熔断,服务熔断就如我们开篇所说的,就是一个开关,可以预防雪崩问题的出现,不会出现一个服务挂掉拖死N个服务的问题。

  我们现在假设订单服务需要频繁的调用商品服务,而商品服务由于某种原因出现了单点故障不能访问mysql,此时订单服务的请求还在不断的过来,

这些请求来到商品服务之后执行了商品这边一大堆的逻辑之后却发现不能入库,what fuck?这就很尴尬了对不对,于是乎,熔断器应运而生。

  我们可以在@HystrixCommand中定义请求商品服务是否开启熔断器、请求数量阈值,错误占比,超时时间等,具体的可以直接看源码里面有那些属性:

  circuitBreaker.enabled:开启熔断器

  circuitBreaker.requestVolumeThreshold:当请求达到这个数量之后,才进行错误占比的计算。

  circuitBreaker.errorThresholdPercentage:错误占比,当错误次数超过这个百分比,就会熔断。

  circuitBreaker.sleepWindowInMilliseconds:半打开休眠时间,熔断之后过了这段休眠时间,就会半打开,尝试接口是否恢复,如果恢复就完全打开熔断器。

  由于参数比较多,可以放到类上面或者配置文件里面全局配置:

1 @DefaultProperties(defaultFallback = "fallbackForGlobal", commandProperties = {
2         @HystrixProperty(name = "circuitBreaker.enabled", value = "true"),
3         @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
4         @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"),
5         @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50")})

  配置好了尝试调用接口,当请求10次,如果其中五次都失败了,那么该接口就会被熔断,直接返回服务降级方法锁返回的。

  最后,说下服务监控,就是hystrix提供的web仪表盘(hystrix dashboard),还是老套路,加依赖:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>

  加注解

  把SpringBoot的endpoints开启:

  启动之后访问http://localhost:8100/hystrix

  根据提示输入地址和title,title就是服务名,我这里是order

  就可以进入这个页面了

  然后我们来几次错误请求:

  就会在仪表盘上看到错误率这些,具体使用还请各位看官自行根据实践。

  好啦,本文就到此结束了,感谢阅读本文。

 

原文地址:https://www.cnblogs.com/alinainai/p/11192168.html

时间: 2024-08-30 12:54:13

小白使用Hystrix的相关文章

spring cloud 2.x版本 Ribbon服务发现教程(内含集成Hystrix熔断机制)

本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 前言 本文基于前两篇文章eureka-server和eureka-client的实现. 参考 eureka-server eureka-client 1 Ribbon工程搭建 1.1 创建spring boot工程:eureka-ribbon 1.2 pom.xml所需要依赖的jar包 <dependency> <groupId>org.springframework.clo

小白文科生眼中的Linux系统

我是一个正统的文科生,基本上在win的基础上长大,最开始接触的是Windows98(95虽然知道,但那时候太小了)然后是me,2000,再到XP,然后是vista,再然后就是使用量最大的7,然后是8,8.1,10,...基本上每个版本都用(玩)过,对win也可以说是有了基础的了解,13年暑假的时候,Android迅速崛起,从那个时候,刚刚知道Linux.在然后就开始疯狂的搜索Linux 的资料,那时候刚刚高中毕业,网上的资料基本都看不懂,虽然看不懂但还是找的津津有味. 记得2013年最先开始了解

小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描

端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相信] 一个端口就是一个潜在的通信通道,也就是一个入侵通道.对目标计算机进行端口扫描,能得到许多有用的信息.进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行扫描.在手工进行扫描时,需要熟悉各种命令.对命令执行后的输出进行分析.用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能.通过

小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议,arp协议属于二层协议,它是基于广播的,所以不可路由.而ICMP协议是可以路由的,理论上可以使用icmp协议发现全球的ip,如果没有边界防火墙(禁止icmp的探测包)进行过滤的话,对目标主机进行扫描,则会收到相应的响应,从而进行捕捉[有边界防火墙的现象比较普遍],但是三层发现的扫描速度也较二层要慢

作为一名初级前端小白,写在年初的一些话

刚开始,还是吐槽一下这个标题吧···原本是打算写在年末的(也就是昨天),奈何大年夜的太忙(2.6才在回家的路上,第二天就大年三十了,基本没什么时间写这篇吐槽了,又熬不动夜),所以就拖到今天了. 其实最初,还是想讲一下从大学刚毕业(2015.06滚出校园),到2016年,新的一年,这一段时间的感受吧. [不忘初心] 好吧,不管是学校里的经历,还是毕业后找工作多么多么辛苦就不废话了(毕竟高中没好好学习,大学是普通的二本,然后大学后又是没好好学习,讲好听点就是拖延症,讲实话就是懒,没长记性),回顾那4

测试小白必备基础知识总结

什么是软件测试 软件测试是使用人工操作或者软件自动运行的方式来检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程. 本质:软件测试是为发现软件错误而执行程序的过程. 例如场景:淘宝网用户登陆 大家都有在淘宝购物的经历吧,如果想要在淘宝进行购物,就必须登陆后才能进行. 那么能够登陆的前提是什么呢?必须是淘宝网的注册用户. 登陆的步骤是什么呢?在下图1中输入已经注册的用户名>输入已设定的密码>点击“登陆”按钮,步骤非常简单. 大家也一定会遇到过用户名和密码输入错误而无法登陆的情况,此

【原创】连“霍金”都想学习的“人工智能”---【自己动手写神经网络】小白入门连载开始了(1)

欢迎关注[自己动手写神经网络]的博客连载!!! 第1章 神经网络简介 神经网络这个词,相信大家都不陌生.就在你打开本书,并试图了解神经网络时,你已经在使用一个世界上最复杂的神经网络——你的大脑,一个由大约1000亿个神经元(每个单元拥有约1万个连接)构成的复杂系统.但人的大脑太过复杂,以至于科学家们到目前为止仍然无法准确解释大脑的工作原理和方式.但有幸的是,生物神经网络的最最基本的元素已经能够被识别,而这就构成了本书想为你介绍的人工神经网络(Artificial Neural Network).

新进java坑的小白;使用IntelliJ IDEA 2016搭建多模块项目;折磨人的过程

maven,IDEA多模块项目,啊,快要疯了,好吧,又是一个笔记 好吧,根据记忆一步一步试吧,实在不行,继续折腾:我这里用的是mac版的IDEA,不过和windows版的弄法是一样的,只是有一些按键的位置不同而已(后来发现好像没有- -!) 先创建一个空项目先~! 1.打开IDEA,选择Create New Project; 2.选择左边的Empty Project;再选择右边的Empty Project;然后Next 3.Next后出现以下界面,写入项目名称,项目路径:然后点Finish; 4

笔记:Spring Cloud Feign Hystrix 配置

在 Spring Cloud Feign 中,除了引入了用户客户端负载均衡的 Spring Cloud Ribbon 之外,还引入了服务保护与容错的工具 Hystrix,默认情况下,Spring Cloud Feign 会为将所有 Feign客户端的方法都封装到 Hystrix 命令中进行服务保护,需要注意的是 Ribbon 的超时与 Hystrix 的超时是二个概念,需要让 Hystrix 的超时时间大于 Ribbon 的超时时间,否则 Hystrix 命令超时后,该命令直接熔断,重试机制就没