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 ...
随机推荐
- Codeforces 1107 E - Vasya and Binary String
E - Vasya and Binary String 思路:区间dp + 记忆化搜索 转移方程看上一篇博客. 代码: #pragma GCC optimize(2) #pragma GCC opti ...
- WebSocket ,Socket ,Http差异
最近一直被Socket 被Http搞懵了,然后归类整理了下 首先需要知道网络七层,从上至下 应用,表示,回话,传输,网络,数据链路,物理,一共7层 WebSocket: 这个是在Html5提出的一种规 ...
- Maven入门介绍
一.Maven的基本概念 1.1为什么需要Maven(作用) Ⅰ. 大家都知道使用Maven,那么我们为什么要要使用maven大家思考过吗?其实我也只是对maven入门阶段,刚刚接触的时候只是知道使用 ...
- django2_开发web系统接口
1.单独创建.../sign/views_if.py文件,开发添加发布会接口 from django.http import JsonResponse from cmdb.models import ...
- QANet
Reading Comprehension(RC) 阅读理解对于机器来说, 是一项非常艰巨的任务.google提出QANet, 目前(2018 0505)一直是SQuAD的No. 1. 今天简单地与大 ...
- 使用python来访问Hadoop HDFS存储实现文件的操作
原文:http://rfyiamcool.blog.51cto.com/1030776/1258292 在调试环境下,咱们用hadoop提供的shell接口测试增加删除查看,但是不利于复杂的逻辑编程 ...
- vscode settings.json
// 快捷键设置 keyiing.json // 将键绑定放入此文件中以覆盖默认值 [ /* // 转换大写 { "key" : "ctrl+shift+u", ...
- Guava:好用的java类库 学习小记
基础功能 google guava中定义的String操作 在google guava中为字符串操作提供了很大的便利,有老牌的判断字符串是否为空字符串或者为null,用指定字符填充字符串,以及拆分合并 ...
- commons-lang3工具类学习(二)
三.BooleanUtils 布尔工具类 and(boolean... array) 逻辑与 BooleanUtils.and(true, true) = true Boolea ...
- js中的setTimeout第三个参数
setTimeout跟setInterval大家应该都很熟悉的,但是一直很少注意,原来这两个函数可以支持第三个参数的,但是IE就呵呵了,仅IE(6-9)呵呵了,其他浏览器都支持的。 第三个参数将作为回 ...