说明:

  1. 每次调用创建一个新的HystrixCommand,把依赖调用封装在run()方法中
  2. 执行execute()/queue做同步或异步调用
  3. 请求接收后,会先看是否存在缓存数据,如果存在,则不会继续请求服务,直接返回缓存数据。如果不存在缓存数据,则继续进行第4步。
  4. 将判断熔断器是否为开启状态,如果开启(已经熔断),则调用第8步FallBack(降级)处理。如果未开启,则继续调用第5步。
  5. 检测当前依赖的线程池是否已满,如果已满,也会调用第8步FallBack(降级)处理,同时进行第7步将结果上报给熔断器,此时上报的状态为【拒绝】。如果未满,则继续进行第6步。
  6. 执行的是run方法。run方法执行过程中如果发生HystrixBadRequestException以外的异常,也将调用第8步FallBack(降级)处理,同时进行第7步将结果上报给熔断器,此时上报的状态为【失败】。如果run方法执行没有异常但是超过预设的时限也将调用第8步FallBack(降级)处理,同时进行第7步将结果上报给熔断器,此时上报的状态为【超时】。
    如果没有异常也未超时,则进行第9步返回结果,同时进行第7步将结果上报给熔断器,此时上报的状态为【成功】。
    在第8步的降级处理中,如果没有实现getFallback的将直接抛出异常,如果降级逻辑调用,成功直接返回
    ,如果降级逻辑调用,失败抛出异常。

执行过程中位于熔断器之后的处理,都会将结果上报给熔断器,熔断器根据结果计算是否进行熔断。

当服务无法正常访问时,就会进行降级处理,调用fallBack降级策略:

 
4-2

共有5种情况会触发降级处理:
1.run()方法抛出非HystrixBadRequestException异常。
2.run()方法调用超时。
3.熔断器开启。
4.线程池已满。
5.显示调用fallback逻辑(用于特殊业务处理)
当阻塞发生时(异常,超时等),由于采用了服务降级的处理,可以保证访问可以继续进行。

作者:酱油和醋
链接:https://www.jianshu.com/p/9de4452a1aa9
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

hystrix实战

1,由于hystrix的设计是命令模式,命令模式可以将请求发送者和接收者完全解耦,所以每次使用的时候,只需讲一个请求封装为一个对象发送过去即可

2,service层的代理ServiceInterceptor的invoke里面,每次都需要一个命令对象

HystrixCommandCallWrapper hystrixCommandCallWrapper = null;

3,从元数据获得他的uri,通过fallbackManager里面拿他是否 有降级方法

4,继承关系,

HystrixCommandCallAndFallbackWrapper (多了服务降级方法,run继承父类)------》

HystrixCommandCallWrapper(重写父类run方法)  ——》

HystrixCommand<Object>

5,HystrixCommandCallWrapper构造函数分析,调用了一个单例的HystrixConfigurationCurator的对象,由他来完成每次hystrixCommand调用的基本配置

  粒度标识,groupKdy    : (具体平台) ins-xxx-platform   , commandKey  :  (具体服务) IUserService/getUserRole

6,HystrixConfigurationCurator构造函数分析,

syncDefaultSetter(),加载默认配置,超时时间,并发数。。。。。

createListenerForDefaultSetter();,监听zk上/config/public/rpc/limit的配置,也重新生成已加载的Setter配置,这里有个根据对方项目有自定义配置的逻辑看不懂

this.myselfLimitCustom = readCustomConfig(ClientUtil.getProjectName());  加载自身/config/public/rpc/limit/${自己项目}的配置(如果有的话

createListenerForCustomSetter  监听/config/public/rpc/limit的子节点的变化,更新项目自定义限流熔断配置

7,调用 Object execute =  hystrixCommandCallWrapper.execute();

执行重写的run方法,真正执行语句  pr = rpcHandle.invoke(uri, data, serviceMetadata.getTimeout(method),

Hystrix 学习使用的更多相关文章

  1. Spring Cloud Hystrix 学习(一)

    在学习Hystrix之前,首先引入一个问题场景,服务雪崩.如下图所示: 可以看到,三个入口服务A.B.C最终都会请求到服务T.当服务T的请求过载,打满CPU都无法匹配请求的频率时,同步调用的上级服务就 ...

  2. hystrix学习

      概述: 字面意思是豪猪.作用是保护你的应用.Netflix会有服务实时调用,hystrix提供服务降级. 目标是将依赖独立化,防止拖垮整个服务.(属于降级服务.) 作用: 第三方接口超时或失败时, ...

  3. Spring Cloud Hystrix 学习(二)熔断与降级

    今天来看下Hystrix的熔断与降级. 首先什么是降级?当请求超时.资源不足等情况发生时进行服务降级处理,不调用真实服务逻辑,而是使用快速失败(fallback)方式直接返回一个托底数据,保证服务链条 ...

  4. Spring Cloud Hystrix 学习(三)请求合并

    什么是请求合并?我们先来看两张图: 上方的两张图中,第二张可以看出服务端只执行了一次响应,这就是请求合并.客户端新增的请求合并模块,内部存在一个等待的时间窗口,将一定时间段内满足条件的请求进行合并,以 ...

  5. Hystrix学习笔记

     服务降级: DashBoard: 例中的8001为要监控的地址:

  6. springcloud学习入门

    Springcloud入门学习笔记 1. 项目初始化配置 1. 1. 新建maven工程 使用idea创建maven项目 1. 2. 在parent项目pom中导入以下依赖 <parent> ...

  7. Springcloud技术分享

    Springcloud技术分享 Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来 ...

  8. Springcloud轻松上手

    Springcloud技术分享 Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来 ...

  9. SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)

    前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netfl ...

随机推荐

  1. java基础 (四)之集合

    List集合中的元素可以重复 ArrayList:数组,查询比较快 LinkedList:链表,常用于增删改效率高 Vector:线程安全,synchronized 线程安全的写法:Collectio ...

  2. FileProvider 添加二级目录

    我们在做Android N升级适配的时候 传统的Intent调用文件的方式会被认为不安全的 然后系统需要让我们使用更加安全的FileProvider的方法去构建intent请求 如 拍照,安装新的ap ...

  3. 7.6 GRASP原则六: 多态 Polymorphism

    GRASP原则六: 多态 Polymorphism  How to handle alternative behaviors based on type 如何处理依据类型不同而有 不同行为的一类需求 ...

  4. net基础运算符

    1.Convert类型转换 总结:      类型如果相兼容的两个变量,可以使用自动类型转换或者强制类型转换.   但是,如果两个类型的变量不兼容,比如string与int或者string 与doub ...

  5. Canvas---clearRect()清除圆形区域

    function clearArcFun(x,y,r,cxt){ //(x,y)为要清除的圆的圆心,r为半径,cxt为context var stepClear=1;//别忘记这一步 clearArc ...

  6. JQuery的常用选择器

    刚开始学JQuery写的如有错误欢迎批评指正 JQuery拥有的选择器可以让我们更快更方便找到想要的元素,然后对相应的元素进行操作 简单介绍一下一些常用的选择器: 1.基本选择器: 标签名选择器: $ ...

  7. GIS中的引擎:地图引擎

    什么是地图引擎?它和地图软件有什么区别? 引擎一词是英文单词engine的音译,通常指发动机,就是动力输出设备.诸如汽车.轮船.飞机的动力提供的核心设备就是引擎.IT领域中,常听说的有搜索引擎.图形引 ...

  8. ELK+MySQL出现大量重复记录问题处理

    一.使用Logstash使用jdbc从MySQL读取数据操作 1.1 安装jdbc插件 jdbc默认已安装,如果没安装使用logstash-plugin安装即可(logstash-plugin在log ...

  9. UVa 11627 - Slalom 二分. oj错误题目 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  10. 架构之路:nginx与IIS服务器搭建集群实现负载均衡(二)

    [前言] 在<架构之路:nginx与IIS服务器搭建集群实现负载均衡(一)>中小编简单的讲解了Nginx的原理!俗话说:光说不练假把式.接下来,小编就和大家一起来做个小Demo来体会一下N ...