Hystrix 学习使用

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

共有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 学习使用的更多相关文章
- Spring Cloud Hystrix 学习(一)
在学习Hystrix之前,首先引入一个问题场景,服务雪崩.如下图所示: 可以看到,三个入口服务A.B.C最终都会请求到服务T.当服务T的请求过载,打满CPU都无法匹配请求的频率时,同步调用的上级服务就 ...
- hystrix学习
概述: 字面意思是豪猪.作用是保护你的应用.Netflix会有服务实时调用,hystrix提供服务降级. 目标是将依赖独立化,防止拖垮整个服务.(属于降级服务.) 作用: 第三方接口超时或失败时, ...
- Spring Cloud Hystrix 学习(二)熔断与降级
今天来看下Hystrix的熔断与降级. 首先什么是降级?当请求超时.资源不足等情况发生时进行服务降级处理,不调用真实服务逻辑,而是使用快速失败(fallback)方式直接返回一个托底数据,保证服务链条 ...
- Spring Cloud Hystrix 学习(三)请求合并
什么是请求合并?我们先来看两张图: 上方的两张图中,第二张可以看出服务端只执行了一次响应,这就是请求合并.客户端新增的请求合并模块,内部存在一个等待的时间窗口,将一定时间段内满足条件的请求进行合并,以 ...
- Hystrix学习笔记
服务降级: DashBoard: 例中的8001为要监控的地址:
- springcloud学习入门
Springcloud入门学习笔记 1. 项目初始化配置 1. 1. 新建maven工程 使用idea创建maven项目 1. 2. 在parent项目pom中导入以下依赖 <parent> ...
- Springcloud技术分享
Springcloud技术分享 Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来 ...
- Springcloud轻松上手
Springcloud技术分享 Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来 ...
- SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)
前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netfl ...
随机推荐
- ckeditor5 安装高亮,颜色插件
ckeditor5 安装高亮插件 1.准备 git clone -b stable https://github.com/ckeditor/ckeditor5-build-classic.git cd ...
- java笔记 -- java数据类型与类型转换
Java是一种强类型语言, 这就意味着必须为每一个变量声明一种类型. Java中一共有8中基本类型: 4种整型: 整型: 用于表示没有小数部分的数值, 允许为负数 类型 存储需求 取值范围 int: ...
- HDU 2612 (2次BFS,有点小细节)
Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. L ...
- iconfont作用在css伪类中的写法
iconfont作用在css伪类中需要注意两点: 1.字体声明(font-family: "iconfont";). 2.把字体写成十六进制的Unicode编码.比如:" ...
- 两道面试题,带你解析Java类加载机制
文章首发于[博客园-陈树义],点击跳转到原文<两道面试题,带你解析Java类加载机制> 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Gr ...
- js禁止页面滚动
开发移动端页面的时候有一个很比较常见的需求,在出现弹窗时,禁止滑动弹窗后面的主体页面.如何实现呢,往下看 js实现整个页面禁止滚动: document.body.addEventListener('t ...
- html5(八) IndexedDB
IndexedDB 是一个数据库系统,它在用户的计算机上存储索引信息. IndexedDB与传统的数据库不同.在IndexedDB中,数据库中的信息以对象的形式存储在对象库表中.对象库没有特定的结构, ...
- 牛客网第4场A
链接:https://www.nowcoder.com/acm/contest/142/A 来源:牛客网 题目描述 A ternary , , or . Chiaki has a ternary in ...
- QSplineSeries QChartView绘制曲线
参考资料: https://www.qtdebug.com/qtbook-paint-smooth-curve-qchart/ https://blog.csdn.net/liang19890820/ ...
- ORA-12638: 身份证明检索失败的解决方法
本地oracle客户端用PLSQL Developer连接远程数据库,每次登录都会在很久之后,出现 ORA-12638: 身份证明检索失败,tnsping 表明TNS配置没有问题. 解决方案: D:\ ...