服务容错保护:Spring Cloud Hystrix

纯自用总结

包导入

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-core</artifactId>
            <version>1.5.18</version>
        </dependency>
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-javanica</artifactId>
            <version>1.5.18</version>
        </dependency>

原理分析

工作流程

1.创建Hystrix对象。
  HystrixCommand:熔断操作后只返回单个操作结果(一般是一个方法)
  HystrixObservableCommand:熔断操作后只返回多个操作结果
2.命令执行
  excute():同步执行
  queue(): 异步执行,返回一个Future对象。
  这两种命令执行是由HystrixCommand实现的。
  
  observe():返回一个 Hot Observable对象,代表操作的多个结果
  toObservable():返回一个Cold Observable对象。
  这两种命令执行由HystrixObservableCommand实现。
3.当前命令的结果是否在缓存中
4.断路器是否打开
  打开即意味着原本应当执行的服务出现故障,那么就将进入fallback指定的操作进行执行。也就是进入第8步。
5.线程池/请求队列 是否占满
6.请求依赖服务,即代码中指定的,在没有故障的情况下应当顺利执行的服务。
  执行时间有时长规定,结果返回时间超过阈值,交由fallback处理
7.断路器健康度计算
  断路器会根据Hystrix返回的数据来决定是否将某个依赖服务的断路器打开,即判定其是否故障。
8.fallback处理
9.返回成功响应

断路器原理

注意:断路器打开状态时,是拒绝服务请求通过的
静态类HystrixCircuitBreakerImpl是断路器的核心实现类。
  isOpen():获取断路器的打开/关闭状态
  allowRequest():判断请求是否允许
  markSuccess():关闭断路器,并重置度量指标对象

请求合并

Hystrix可以将一个很短的时间内(默认10毫秒)对同一个依赖服务的多次请求进行整合并批量发起请求的功能。
使用@HystrixCommand注解

注意:Hystrix为每个依赖服务都建立了独立的线程池。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值