springcloud 学习第三天----hystrix 的学习

Hystrix 的熔断机制

服务间的调用存在服务雪崩情况,服务间的雪崩情况会引起其他调用方请求超时和请求堵塞情况。为了解决这种情况,使用 hystrix 进行解决。

主要实现方式:

  • 线程隔离。
    1.每个服务分配独立的线程池连接数
    2.服务降级处理,设置超时时间,快速返回信息
  • 服务熔断。 相当于家里电路熔断器
    1.设置服务的阙值、超时次数、休眠时间。当超过阙值会进行休眠,直接返回信息。
    2.设置连接时长、读取时长,当超时直接返回信息

项目搭建

pom文件引入jar包

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

application 主方法加上 @EnableCircuitBreaker

在这里插入图片描述

1.@SpringCloudApplication = @EnableDiscoveryClient + @SpringBootApplication + @EnableCircuitBreaker
2.使用 @EnableCircuitBreaker 而不是使用 @EnableHystrix,因为 @EnableHystrix 只是服务熔断,不包含线程隔离,所以使用 @EnableCircuitBreaker

线程隔离

1.每个服务分配独立的线程池连接数

通常是通过zuul 进行分配的,还没学习到,以后补充上来 …

2.服务降级处理,设置超时时间,快速返回信息

[^小技巧]:实现熔断机制可以手动在 Mircorservice-user 项目接口中加入一个线程睡眠时间。在这里插入图片描述

  • 方法上使用,作用于该方法。
    在这里插入图片描述
    在这里插入图片描述

1.熔断方法和接口的参数和返回值类型必须相同,不相同就会报错。报错信息
2.可以配置一些相关配置,在 源码 HystrixCommandProperties 中,介绍几种常用的配置。

  • execution.isolation.thread.timeoutInMilliseconds 执行超时时长,默认是1000 毫秒,单位是毫秒
  • execution.timeout.enabled 执行超时时长是否开启,默认是开启
    设置超时时长的一些配置
  • 类上使用,作用于该类。
    类上使用

全局配置或者针对某个服务设置属性

在yml 配置 相关配置文件
hystrix.command.[服务名称].execution.isolation.thread.timeoutInMilliseconds:毫秒 配置文件配置

上面default 是代表所有的服务接口配置,如果指定相对应的服务名称也可以。

服务熔断

Hystrix 可以实现弹性容错,当情况好转则自动重连。服务调用方可以自己进行判断某些服务反应慢或者存在大量超时情况时,能够主动熔断,防止整垮整个系统。

Hystrix 熔断状态机模型

Hystrix 熔断状态机模型
通过上图流程:

  1. 如果熔断器一直success或者失败次数低于 threshold(阙值),则熔断器一直处于 Closed 状态 。
  2. 当熔断器处于失败次数高于 threshold (阙值),则熔断器处于开启(Open)状态,当时间过了reset timeout ,熔断器处于半开启(Half Open)状态,放部分连接通过,如果还是失败,则继续处于开启(Open)状态,然后又到了超时重置时间,如果还是失败,则循环上面操作,如果成功,则进入关闭(Closed)状态。

实现方式

方式1. commandProperties 中增加配置信息
熔断配置文件
方式2. yml 配置 文件中增加配置信息
在这里插入图片描述

circuitBreaker.requestVolumeThreshold: 请求量阙值,默认 20 个请求
circuitBreaker.sleepWindowInMilliseconds: 休眠时长,默认时长 5000 毫秒
circuitBreaker.errorThresholdPercentage: 错误阙值百分比,默认 50%

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值