【Spring Cloud】详解 Hystrix 断路器:服务熔断、服务降级,Hystrix Dashboard:服务监控

前言:本文的 Hystrix 断路器主要技术内容学习自教程视频:https://www.bilibili.com/video/BV1jJ411S7xr?p=13,此教程非常通俗易懂且有质量,也希望更多人能够支持这样高质量的UP,我在学习时收获很多,因视频形式不易复习回顾,因此加了一部分自己的见解并整理成图文博客的形式。

1 Hystrix 概述

1.1 分布式系统面临的问题

在这里插入图片描述

1.2 服务雪崩

在这里插入图片描述

1.3 什么是 Hystrix

在这里插入图片描述

1.4 Hystrix 的应用

  • 服务降级
  • 服务熔断
  • 服务限流
  • 接近实时的监控

2 Hystrix 服务熔断(在服务端实现!)

2.1 是什么

在这里插入图片描述

2.2 项目实战

注:本系列文章的项目部分是前后关联的,多数项目是从前面写过来的,因此也可去参考之前的【Spring Cloud】文章

1、参考之前的服务提供者模块 springcloud-provider-dept-8001

  • 新建springcloud-provider-dept-hystrix-8001
  • 将之前8001的所有东西拷贝一份

2、修改pom,添加Hystrix的依赖

<!--Hystrix-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
    <version>1.4.7.RELEASE</version>
</dependency>

3、修改yml,修改eureka实例的id
在这里插入图片描述
4、修改DeptController
在这里插入图片描述
5、修改主启动类,添加新注解 @EnableCircuitBreaker,修改名称为 DeptProviderHystrix8001
在这里插入图片描述
6、测试:

  • 启动Eureka集群,启动此服务提供者的主启动类 DeptProviderHystrix8001(含 Hystrix 服务熔断机制)进行测试。
    -————可见,当访问不存在数据库中的 id 时,不会报错崩溃,具有很好的健壮性。
    在这里插入图片描述

  • 之后启动原本的服务提供者模块 springcloud-provider-dept-8001(不含熔断机制) 进行对比测试。
    -————将会报 500 错误,如果后续的微服务模块也要用到这个结果的话,那么像这种情况,也会导致后续的微服务模块出现雪崩式的问题。
    在这里插入图片描述

3 Hystrix 服务降级(在客户端实现!)

3.1 是什么

在这里插入图片描述
另外,服务降级处理是在客户端实现完成的,与服务端没有关系

3.2 项目实战

1、修改 springcloud-api 工程,根据已经有的 DeptClientService 接口新建一个实现了 FallbackFactory 接口的类 DeptClientServiceFallbackFactory

【注意:这个类上需要@Component注解!!!,方法无特殊情况不要返回 null,下图中的 queryAll() 返回返回 null 是不正确的!】
在这里插入图片描述
2、修改 springcloud-api 工程,DeptClientService 接口在注解 @FeignClient 中添加 fallbackFactory 属性值
在这里插入图片描述
3、springcloud-consumer-dept-feign-80 工程修改 yml
在这里插入图片描述

4、测试
在这里插入图片描述

4 对比:服务熔断,服务降级

服务熔断在服务端实现,一般是某个服务故障或者异常引起,类似现实世界中的 “保险丝” , 当某个异常条件被触发,直接熔断整个服务,而不是一直等到此服务超时。

服务降级在客户端实现,所谓降级,一般是从整体负荷考虑,就是当某个服务熔断之后,服务器将不再被调用,此时客户端自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然服务水平下降,但好歹可用,比直接挂掉要强。

5 Hystrix Dashboard 服务监控

5.1 是什么

在这里插入图片描述
对应 Spring Cloud 官网的一张图:
在这里插入图片描述

5.2 项目实战

1、新建工程 springcloud-consumer-hystrix-dashboard-9001,内容是复制之前服务消费者 80 模块,并此新模块的 pom 文件中新增以下依赖:

<!--Hystrix-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
    <version>1.4.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
    <version>1.4.7.RELEASE</version>
</dependency>

2、application.yaml配置

server: 
	port: 9001

3、主启动类改名 + 新注解@EnableHystrixDashboard
在这里插入图片描述
4、为了让所有的Provider微服务提供模块(8001/8002/8003) 也都能被监控,因此

(1)也都需要配置监控依赖
在这里插入图片描述
(2)都要注入一个 Servlet Bean
在这里插入图片描述

5、测试,启动springcloud-consumer-hystrix-dashboard-9001该微服务监控消费端
在这里插入图片描述
启动 springcloud-provider-dept-hystrix-8001

访问 http://localhost:8001/dept/get/1
在这里插入图片描述

http://localhost:8001/actuator/hystrix.stream 【查看1秒一动的数据流】
在这里插入图片描述
我们在监控页面的主页输入这两个参数信息后,就可以来到详细监控页面
在这里插入图片描述
详细监控页面的信息会随着服务消费者模块的请求而动态变化,
在这里插入图片描述
如何分析监控页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更复杂的情况:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超周到的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值