前面相关文章已经学习到了服务注册中心,服务调用,的Ribbon,LoadBalancer,Feign和OpenFeign,Consul,Zookeeper等相关内容。接下来学习服务降级。

一、Hystrix

首先说明一点,它差不多已经不用了,但是为什么要说呢,因为它太牛逼了,后面很多东西都是借鉴它来的,所以必须来了解一下。

1、什么是Hystrix

(1)系统分开开发后,存在了很多问题


(2)是什么

(3)能干嘛

(4)停更原因


2、Hystrix重要概念

Hystrix的服务降级熔断限流概念

(1)服务降级

  • 反正就是你要给我保底的


  • 什么情况会触发呢

(2)服务熔断


(3)服务限流

3、支付案例

(1)构建项目

  • 建model
  • 导依赖
<dependencies><!--hystrix--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><!--eureka client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --><groupId>cn.mldn</groupId><artifactId>cloud-api-commons</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
  • 写yml
server:port: 8001spring:application:name: cloud-provider-hystrix-paymenteureka:client:register-with-eureka: truefetch-registry: trueservice-url:#defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eurekadefaultZone: http://eureka7001.com:7001/eureka
  • 主启动
  • 写业务逻辑

    这里是模拟来,所以就没有那么标准,现在启动测试没事问题,后面个error虽然是停顿了,但是到结束都还是没啥问题。

(2)正常到错误

  • 这里要模拟多线程去使用:先安装这

  • 模拟



  • 启动测试

    再次发送这个都发现满了很多

    之前把资源分配均匀,但是现在大量的去访问error的方法,此时就会变慢,OK访问也变慢了,此时就需要接下来的Hystrix来容错和限流来处理了

(3)订单微服务调用支付服务卡顿

  • 建项目
  • 改pom
 <dependencies><!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--hystrix--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><!--eureka client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --><dependency><groupId>cn.mldn</groupId><artifactId>cloud-api-commons</artifactId><version>1.0-SNAPSHOT</version></dependency><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--一般基础通用配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
  • 写yml
server:port: 80eureka:client:register-with-eureka: falseservice-url:defaultZone: http://eureka7001.com:7001/eureka/
  • 主启动

  • 业务类


  • 启动测试

    测试error就直接报错

4、根据上面项目问题处理降级容错

1)服务降级

(1)降级的配置

可以实现注解@HystrixCommand进行处理

(2)8001先从自己找问题(fallback)

  • 主启动类上配置
  • 业务类写


    或者如下写

(3)从消费者端80去fallback

  • 再次回顾

  • 80实现【比如我们8001说是五秒都是正常的,但是你消费者端不想等,那你就自己处理】

    一般是放在客户端

  • yml修改

  • 写启动类

  • 写业务类

  • 此时启动测试,发现一秒五就报错。

(4)看一下现在存在的问题


每一个方法都要去写一个兜底的方法的话,会发现我们的代码膨胀,要是以后的代码量出现几万,几万时候都去配置发现会很拉胯。【所以肯定要配置通用的+一些部分自己特定配置的方式处理】

(5)DefaultProperties(解决上面问题)

  • 看一下原因
  • 配置方式

  • 自己配置

    上面这样配置报错了’
  • 如下配置就OK了

(6)全局配置的降级

  • 首先想一下我们既然可以调佣这微服务可以调用成功,那我们是否可以在这里全局做了降级【在如下的位置配置就可以达到解耦的作用】
  • 分析一下如下【之前也见过了运行和超时异常,这里就模拟宕机异常】
  • 修改cloud-consumer-feign-Hystrix-order80
    • 根据cloud-consumer-feign-Hystrix-order80已经有的paymentHystrixService接口,重新建一个类(PaymentFallbackService)实现该接口,统一为接口里面的方法进行异常处理。

    • paymentFallback类实现paymentFeignClientService接口

    • YML配置

    • PaymentFeignClientService接口

    • 测试

      把你的8001挂掉

      如果你之前的没有关掉就访问如下

2)服务熔断

(1)熔断概念


这个之前就说到过,这里就不细入讲解了。其实它也是降级的特别版。

  • 段路器:理解为家里面的保险丝
  • 熔断概念
  • 看一下图

(2)案例演示

修改cloud-provider-Hystrix-payment8001

  • 首先介绍一下聚哈的含义:String serialNumber = IdUtil.simpleUUID();它是生成唯一id好 【是由如下的一个组织更新的】

  • 修改配置8001的PaymentService

    //circuitBreaker.enabled是,是否开启断路器
    @HystrixProperty(name = “circuitBreaker.enabled”,value = “true”),
    //circuitBreaker.requestVolumeThreshold,请求次数【它和失败率是挂钩的,就是在10次以内失败率达到60就熔断】
    @HystrixProperty(name = “circuitBreaker.requestVolumeThreshold”,value = “10”),
    //circuitBreaker.sleepWindowInMilliseconds,时间窗口期
    @HystrixProperty(name = “circuitBreaker.sleepWindowInMilliseconds”,value = “10000”),
    //circuitBreaker.errorThresholdPercentage,失败率达到多少后跳闸
    @HystrixProperty(name = “circuitBreaker.errorThresholdPercentage”,value = “60”)


    你配置了就按你的,没配置就是它默认的。

  • 再修改controller

  • 测试

    • 正确测试
    • 测试不正常情况【不正确使用会在过过一段时间后恢复正常】

      当我们使劲点,超过很多次之后,输入正常的也不行

      过一段时间测试又恢复正常

(3)熔断小总结

  • 断路器在上面情况起作用呢

  • 断路器开启或关闭的流程

  • 断路器打开之后

  • 所有的配置

3)服务限流

这个是基本淘汰了,这个比较重要,在SpringCloudAlibaba进行详细讲解

5、Hystrix工作流程

  • 工作流程图

6、Hystrix图形化Dashboard

  • 就是服务监控HystrixDashboard

1)搭建环境

(1)建model

(2)写pom

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

(3)写yml

(4)主启动

这里多提一嘴,监控信息必须导入如下依赖

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

(5)启动测试

启动访问如下地址

2)监控实战

(1)配置8001

/***此配置是为了服务监控而配置,与服务容错本身无关,springcloud升级后的坑*ServletRegistrationBean因为springboot的默认路径不是"/hystrix.stream",*只要在自己的项目里配置上下面的servlet就可以了*/@Beanpublic ServletRegistrationBean getServlet() {HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);registrationBean.setLoadOnStartup(1);registrationBean.addUrlMappings("/hystrix.stream");registrationBean.setName("HystrixMetricsStreamServlet");return registrationBean;}

(2)启动测试

  • 配置地址

多点几下这里进入正确的测试


多点几下错误测试





二、sentinel和resilience4j

这两个都在后续的笔记再总结

SpringCloud之服务降级(总体第四篇)相关推荐

  1. 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  2. 学习笔记:SpringCloud 微服务技术栈_实用篇②_黑马旅游案例

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  3. 学习笔记:SpringCloud 微服务技术栈_高级篇⑤_可靠消息服务

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  4. springcloud(Hystrix服务降级,服务熔断)

    基础知识 首次分布式服务系统面临的问题 复杂的分布式体系结构中的应用程序有数十个依赖关系,每个依赖有时候难免发生问题,这个时候可能引发连锁反应,导致整个系统雪崩. 所以就有了Hystrix: 官网地址 ...

  5. 【SpringCloud】服务降级 Hystrix 断路器

    文章目录 1.概述 1.3 服务雪崩 1.4 Hystrix 1.5 服务降级 1.5.1 哪些情况会出发降级 1.5 服务熔断 1.5 服务限流 2.案例 2.1 案例1 2.1.1 配置 2.1. ...

  6. SpringCloud alibaba-Sentinel服务降级策略

    文章目录 RT: 异常比例: 异常数: RT: 平均响应时间 (DEGRADE_GRADE_RT):当 1s 内持续进入 N 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为 ...

  7. 【SpringCloud】服务降级 Hystrix DashBoard

    文章目录 1.概述 2.案例 2.1 案例1 2.1.1 pom 2.1.2 主类 2.1.3 配置 2.1.4 provider 2.1.5 测试 2.1.6 被监控者 1.概述 视频笔记:http ...

  8. SpringCloud核心教程 | 第四篇:服务注册与发现 Consul篇

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  9. SpringCloud学习笔记7——初级篇之服务降级

    六.Hystrix Hystrix官方宣布,停止更新,进入维护阶段,但Hystrix非常优秀,属"业界标杆" 1.Hystrix断路器知识点 能做的事:服务降级.服务熔断.接近实时 ...

最新文章

  1. Oracle round函数是什么意思?怎么运用?
  2. 我的日常工具——gdb篇
  3. Python导入CSV短代码(pandas?),以';'分隔 和','全部
  4. VTK:图片之ImageSlice
  5. 【208天】黑马程序员27天视频学习笔记【Day21-中】
  6. java学习(24):if..else...if
  7. Python爬虫自学之第(②)篇——BeautifulSoup解析网页
  8. 关于oracle sql语句查询时表名和字段名要加双引号的问题
  9. Jenkins操作手册
  10. 开发步骤_直播软件开发直播APP开发具体步骤
  11. Git CMD - diff: Show changes between commits, commit and working tree, etc
  12. 点云数据增强及预处理
  13. 英语口语之最全面最标准的数学符号、公式的英语读法
  14. 【NetApp】NetApp存储设备的CPU使用率分析
  15. 绝对值函数可导点的判断
  16. 论文阅读笔记《Low-shot Visual Recognition by Shrinking and Hallucinating Features》
  17. TGA文件转YUV文件
  18. LAMP架构(基础篇)
  19. DP(最长上升子序列)——腾讯校招题:逛街
  20. scratch编程神笔马良

热门文章

  1. Linux系统内核框图
  2. hal编程 gt911 触摸芯片驱动 ( 枚举 结构体 熟用)( 安富莱 f429 4.3寸电容屏 )
  3. python标识符最大可能长度_Opencv-Python学习笔记(二)
  4. python回车键退出_python退出程序
  5. 关于redis操作是否是原子的
  6. Windows无法播放WMV3文件?
  7. 2008 iis7 php mysql_windows2008+iis7+php+mysql+phpmyadmin
  8. ipython及ipython notebook常用操作
  9. OFD格式转PDF怎么在线转换?分享在线转换方法
  10. ROS坐标系中base_link和base_footprint的区别