工作流程(参考:https://github.com/Netflix/Hystrix/wiki/How-it-Works)

  1、 创建一个HystrixCommand或HystrixObservableCommand实例

    第一步就是构建一个HystrixCommand或HystrixObservableCommand实例来向其他的组件发出操作请求,通过构造方法创建实例。

    HystrixCommand:返回一个单响应

    HystrixObservableCommand: 返回一个观察者发出的响应

  2. 这里 有 4个 方法,前两只适用于HystrixCommand不适用于HystrixObservableCommand

    execute():阻塞型方法,返回单个结果(或抛出异常)

    queue(): 异步方法,返回一个Future对象,可以从中取出单个结果(或抛出异常)

    observe(): 返回Observable对象

    toObserve(): 返回Observable对象

  3. 缓存判断

    检查缓存内是否有对应指令的结果,如果有的话,将缓存的结果直接以Observable对象形式返回。

  4. 断路器判断

   检查 Circuit Breakerr的状态如果 Circuit Breaker的状态为开启 Hystrix将不会执行对应指令,而是直接进入失败处理状态(图中 8)。如果Circuit Breaker的状态为关闭,Hystrix会继续执行(图 5)

  5. 线程池、任务队列、信号量的检查

   确认是否有足够的资源执行操作指令。当线程池和队列(或者是信号量不使用隔离模式的时候 资源满的时候 ,Hystrix将不会执行对应指令并且会直接进入失败处理状态 (图 8)

  6. HystrixObservableCommand.construct()和HystrixCommand.run()

   如果资源充足,Hystrix将会执行操作指令,操作指令的调用最终都会到这两个方法:

   HystrixCommand.run():返回一个响应或者抛出一个异常。

   HystrixObservableCommand.construct(): 返回一个可观测的发出响应(s)或发送一个onError通知

   如果执行指令的时间超时,执行线程会抛出TimeException异常。Hystrix会抛弃结果并直接进入失败状态。如果执行指令成功,Hystrix会进行一系列的数据记录,然后返回执行的结果。

  7. 统计断路器的健康情况

    Hystrix会根据记录的数据来计算失败比率,一旦失败比率达到某一阀值将自动开启Circuit Breaker

  8. 回退

   如果我们再Command中实现了HystrixCommand..getFallback方法(或HystrixObservableCommand.resumeWithFallback())方法,Hystrix会返回对应方法的结果,如果没有实现这些方法,Hystrix仍然会返回一个空的Observable对象,并且可以通过onError来终止并处理错误。

  调用不同的方法放回不同的结果:

  execute(): 将会抛出异常

  queue(): 将会返回一个Future对象,如果调用它的get()方法将会抛出异常。

  observe()和toObservable():都会返回上述的Observable对象

  9. 返回成功

   如果Hystrix执行成功,返回的响应取决于在步骤2中调用命令。

   execute():阻塞型方法,返回单个结果(或抛出异常)

   queue(): 异步方法,返回一个Future对象,可以从中取出单个结果(或抛出异常)

   observe(): 返回Observable对象

   toObserve(): 返回Observable对象

断路器工作原理

  

  断路器开启或者关闭的条件:

     1、 当满足一定的阀值时候 (默认 10 秒内 超过 20 个请求 次数 )

     2、 当失败率达到一定的时候( 默认 10 秒内超过 秒内超过 50%50%50%的请求失败 )

     3、 到达以上阀值 ,断路器将会开启

     4、 当开启的时候 ,所有请求 都不会进行转发

     5、 一段时间之后( 默认是 5秒),这个时候断路器是半开状态, 会让其中一请求进行转发。如果成功断路器会关闭,若失败继续开启。重复 4和 5。

HystrixCircuitBreaker接口

  

SpringCloud学习笔记(12)----Spring Cloud Netflix之Hystrix断路器的流程和原理的更多相关文章

  1. SpringCloud学习笔记(13)----Spring Cloud Netflix之Hystrix断路器的隔离策略

    说明 : 1.Hystrix通过舱壁模式来隔离限制依赖的并发量和阻塞扩散 2. Hystrix提供了两种隔离策略:线程池(THREAD)和信号量隔离SEMAPHORE). 1. 线程池隔离(默认策略模 ...

  2. SpringCloud学习笔记(11)----Spring Cloud Netflix之Hystrix断路器的使用

    为什么会有断路器? 在微服务架构中,系 是拆分成 一个的服务单元各间通过注册与发现 的方式互相依 赖.每个单元都在不同的进程中运行, 都是通过远程调用的方式进行信 ,这样就有可能因为网络原或 是依赖服 ...

  3. Spring Cloud入门教程-Hystrix断路器实现容错和降级

    简介 Spring cloud提供了Hystrix容错库用以在服务不可用时,对配置了断路器的方法实行降级策略,临时调用备用方法.这篇文章将创建一个产品微服务,注册到eureka服务注册中心,然后我们使 ...

  4. springCloud学习-消息总线(Spring Cloud Bus)

    1.简介 Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现 ...

  5. Spring Cloud(Dalston.SR5)--Hystrix 断路器

    Spring Cloud 对 Hystrix 进行了封装,使用 Hystrix 是通过 @HystrixCommand 注解来使用的,被 @HystrixCommand 注解标注的方法,会使用 Asp ...

  6. Spring Cloud(Dalston.SR5)--Hystrix 断路器-缓存

    在 Spring Cloud 中可以使用注解的方式来支持 Hystrix 的缓存,缓存与合并请求功能需要先初始化请求上下文才能实现,因此,必须实现 javax.servlet.Filter 用于创建和 ...

  7. Spring Cloud(Dalston.SR5)--Hystrix 断路器-合并请求

    在 Spring Cloud 中可以使用注解的方式来支持 Hystrix 的合并请求,缓存与合并请求功能需要先初始化请求上下文才能实现,因此,必须实现 javax.servlet.Filter 用于创 ...

  8. SpringCloud学习笔记(16)----Spring Cloud Netflix之Hystrix Dashboard+Turbine集群监控

    前言: 上一节中,我们使用Hystrix Dashboard,只能看到单个应用内的服务信息.在生产环境中,我们经常是集群状态,所以我们需要用到Turbine这一应用. 作用:汇总系统内的多个服务的数据 ...

  9. SpringCloud学习笔记(14)----Spring Cloud Netflix之Hystrix对Feign的支持

    1. Hystrix对Feign的支持 添加Feign中IUserBiz的实现类HystrixFallBack: package com.wangx.cloud.springcloud02consum ...

随机推荐

  1. Oracle数据库基础(二)

    1.表名命名规则:必须以字母开头,不能超过30个字符,不要有Oracle保留字    2.数据类型      字符型:         char :2000个字符   定长  效率高          ...

  2. Python 之 PyCharm使用

    PyCharm  的官方网站地址是:https://www.jetbrains.com/pycharm/download/ 教育版:https://www.jetbrains.com/pycharm- ...

  3. Android宝宝点点乐游戏源码完整版

    Android宝宝点点乐游戏源码完整版,是我从其他网站转载过来的,就是那个安卓教程网,该游戏目前已经上线了百度应用商店了,大家可以去搜索一下,看看演示吧. <ignore_js_op> & ...

  4. HDU 1009 FatMouse' Trade【贪心】

    解题思路:一只老鼠共有m的猫粮,给出n个房间,每一间房间可以用f[i]的猫粮换取w[i]的豆,问老鼠最多能够获得豆的数量 sum 即每一间房间的豆的单价为v[i]=f[i]/w[i],要想买到最多的豆 ...

  5. WiFi相关基础概念

    转自:https://blog.csdn.net/lbaihao/article/details/73250798 一.WiFi相关基础概念 1.什么是wifi 我们看一下百度百科是如何定义的: Wi ...

  6. Codeforces Round #493 (Div. 2) C. Convert to Ones 乱搞_构造_好题

    题意: 给你一个长度为 nnn 的 010101串 ,你有两种操作: 1.将一个子串翻转,花费 XXX 2.将一个子串中的0变成1,1变成0,花费 YYY 求你将这个01串变成全是1的串的最少花费. ...

  7. 浅谈冒烟测试(Smoke Testing)

    鉴于之前跟开发提到提测前需要进行冒烟测试,然后几个开发一脸迷茫的问我:什么叫冒烟测试?所以我准备跟大家从以下几个方面简单的分享一下什么是冒烟测试. 一.软件测试的分类 二.冒烟测试(Smoke Tes ...

  8. [Atcoder Code Festival 2017 Qual B Problem F]Largest Smallest Cyclic Shift

    题目大意:给你\(A\)个a,\(B\)个b,\(C\)个c,要你构造一个字符串,使它的最小循环表示法最大.求这个表示法.解题思路:不知道怎么证,但把a.b.c当做单独的字符串扔进容器,每次把字典序最 ...

  9. IDEA快速搭建 SpringCloud 注册中心与

    第一步:创建 注册中心(eureka)项目 按照以下步骤一步一步来(只是对于IDEA的初学者来说) (我这里选择maven项目.比较方便) 给注册中心项目 取上可爱的名称 第二步配置 eureka的p ...

  10. 【codeforces 757E】Bash Plays with Functions

    [题目链接]:http://codeforces.com/problemset/problem/757/E [题意] 给你q个询问; 每个询问包含r和n; 让你输出f[r][n]; 这里f[0][n] ...