0502-Hystrix保护应用-简介,使用,健康指标等
一、概述
参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_circuit_breaker_hystrix_clients
源码wiki:https://github.com/Netflix/Hystrix/wiki
Netflix创建了一个名为Hystrix的库,实现断路器模式。在微服务体系结构中,通常有多层服务调用。
较低级别的服务中的服务故障可能导致级联故障直至用户。当对特定服务的调用大于CurrBurnReal.RealStestMultRESHOLD(默认值:20请求)和故障率大于TraceBurror.Error阈值百分比(默认值:50%)在MultICC.LoLink StutsTimeMimLimeDS(默认值:10秒)定义的滚动窗口中,电路断开,不进行调用。在发生错误和开路的情况下,开发者可以提供fallback。
开放的电路可以防止级联失败,并允许服务自我恢复。回退可以是Hystrix另一个受保护的调用,静态数据或一个空值。回退可能会是链,因此第一次回退会导致其他业务呼叫转而回退到静态数据。
二、使用
2.1、hystrix-javanica简介
源码地址:https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica
与其他语言(如反射和注释)相比,Java语言具有很大的优势。所有现代框架,如Spring,Hibernate,myBatis等都力求最大限度地利用这些优势。在Hystrix中引入注释的想法是改进的明显解决方案。目前使用Hystrix涉及编写大量代码,这是快速开发的障碍。您可能花费大量时间编写Hystrix命令。通过引入支持注释,Javanica项目的构想更容易使用Hystrix。
简化了Hystrix使用
2.2、使用
@HystrixCommand由一个名为“javanica”的Netflix contrib库提供。Spring Cloud会自动将带有该注释的Spring bean包装在连接到Hystrix断路器的代理中。断路器计算何时打开和关闭电路,以及在发生故障时应采取的措施。
要配置@HystrixCommand,您可以使用带有@HystrixProperty注释列表的commandProperties属性
1、pom引用
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>
2、启动类增加如下注解
@EnableCircuitBreaker
3、在调用方法增加注解以及fallback方法
@Component public class StoreIntegration {@HystrixCommand(fallbackMethod = "defaultStores")public Object getStores(Map<String, Object> parameters) {//do stuff that might fail }public Object defaultStores(Map<String, Object> parameters) {return /* something useful */;} }
注意点:
1、fallbackMethod 必须是定义的方法
2、defaultStores 方法参数返回值与注解 HystrixCommand标记的一致
3、在发生问题后,会经过defaultStores处理。
三、其他
3.1、传播安全上下文或使用Spring Scopes
如果你想要一些线程本地上下文传播到@HystrixCommand,默认声明将不起作用,因为它在线程池中执行命令(在超时的情况下)。您可以使用某种配置将Hystrix切换为与调用方使用相同的线程,或者直接在注释中请求它使用不同的“隔离策略”。
参看地址:https://github.com/Netflix/Hystrix/wiki/Configuration#command-properties
execution.isolation.strategy:该属性指示HystrixCommand.run()执行的隔离策略,以下两种选择之一:
THREAD - 它在单独的线程上执行,并发请求受线程池中线程数的限制
SEMAPHORE - 它在调用线程上执行,并发请求受信号计数限制
缺省值和建议的设置是使用线程隔离(THREAD)和使用信号量隔离(SEMAPHORE)的HystrixObservableCommands运行HystrixCommands。
使用在对应的方法上增加
@HystrixCommand(fallbackMethod = "findByIdFallback", commandProperties = @HystrixProperty(name = "execution.isolation.strategy", value = "SEMAPHORE"))
如果使用@SessionScope或@RequestScope,则同样适用。您将知道何时需要执行此操作,因为运行时异常表示无法找到范围内的上下文。
【1.2开始】您也可以选择将hystrix.shareSecurityContext属性设置为true。这样做会自动配置一个Hystrix并发策略插件钩子,他可以将SecurityContext从主线程传输到Hystrix命令使用的钩子。Hystrix不允许注册多个hystrix并发策略,因此通过将自己的HystrixConcurrencyStrategy声明为Spring bean,可以使用扩展机制。Spring Cloud将在Spring上下文中查找您的实现,并将其包装在自己的插件中。【一般是出异常,出问题才需配置】
参看文章:https://github.com/spring-cloud/spring-cloud-netflix/issues/1330,https://github.com/spring-cloud/spring-cloud-netflix/issues/1336
3.1.1、Scope
Scope描述的是Spring容器如何新建Bean实例的。Spring的Scope有以下几种,通过@Scope注解来实现。
(1)Singleton:一个Spring容器中只有一个Bean的实例,此为Spring的默认配置,全容器共享一个实例。
(2)Prototype:每次调用新建一个Bean实例。
(3)Request:Web项目中,给每一个 http request 新建一个Bean实例。
(4)Session:Web项目中,给每一个 http session 新建一个Bean实例。
(5)GlobalSession:这个只在portal应用中有用,给每一个 global http session 新建一个Bean实例。
3.2、健康指标
连接断路器的状态也暴露在呼叫应用程序的/ health端点中。
访问地址:http://localhost:8761/health
可查看如下
{"hystrix": {"openCircuitBreakers": ["StoreIntegration::getStoresByLocationLink"],"status": "CIRCUIT_OPEN"},"status": "UP" }
此时可以断掉服务提供方,稍后查看
断路器打开
其中health的查看,需要添加
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
3.3、Hystrix度量流
启用Hystrix指标流包括对弹簧启动启动器执行器的依赖。这会将/hystrix.stream公开为管理端点。访问具体接口,能够查看消息
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
后期可以使用Dashboard查看
同样Feign也支持Hystrix
代码地址:https://github.com/bjlhx15/spring-cloud/tree/master/microservice-comsumer-movie-ribbon-with-hystrix
0502-Hystrix保护应用-简介,使用,健康指标等相关推荐
- android 健康分析,开题报告-基于Android的健康指标记录与分析软件的设计与实现.doc...
PAGE 盐城师范学院 毕业论文(设计)开题报告 题 目: 基于Android的健康指标记录与分析软件的设计与实现 姓 名: 二级学院: 信息工程学院 专 业: 计算机科学与技术 班 级: 12(1) ...
- 软件加密保护技术简介
加密技术 软件加密保护技术简介 在这里并不是要系统的讨论软件加密保护技术,只是简单介绍一些和破解相关的软件保护方式,目的是让大家搞清楚哪些是解密的对象.有一点是要首先明确的,并不是所有的受限制软件都可 ...
- k8s中graphite_在Graphite中存储Hystrix的几个月历史指标
k8s中graphite Hystrix的杀手级功能之一是低延迟,数据密集和美观的仪表板 : 即使这只是Hystrix实际操作的副作用(断路器,线程池,超时等),它也往往是最令人印象深刻的功能. 为了 ...
- hystrix应用 博客_用Hystrix保护您的应用程序
hystrix应用 博客 在先前的帖子http://www.javacodegeeks.com/2014/07/rxjava-java8-java-ee-7-arquillian-bliss.html ...
- 在Graphite中存储Hystrix的几个月历史指标
Hystrix的杀手级功能之一是低延迟,数据密集型且美观的仪表板 : 即使这只是Hystrix实际操作的副作用(断路器,线程池,超时等),它也往往是最令人印象深刻的功能. 为了使其工作,您必须包括hy ...
- 用Hystrix保护您的应用程序
在之前的帖子http://www.javacodegeeks.com/2014/07/rxjava-java8-java-ee-7-arquillian-bliss.html中,我们讨论了微服务以及如 ...
- 神策 sensor官网简介以及各个指标简介
神策 sensor官网简介 1. 神策是什么 神策就是一个数据分析产品,可以基于企业的数据,做分析,帮助做分析,指导企业决策. 2. 官网简单布局 产品 解决方案 用户中心 关于我们 体验demo 支 ...
- 如何保护孩子的牙齿健康
系列文章请访问我的GitHub博客 一口好牙需要终生管理 一口好牙的重要性不言而喻,我们每天吃饭咀嚼全靠它. 不仅如此,一口洁白整齐的好牙,还体现着我们的收入和社会地位,甚至影响着我们的择业和择偶. ...
- bmi健康指标计算器php,bmi计算器
BMI值计算 BMI值原来的设计是一个用于公众健康研究的统计工具.当我们需要知道肥胖是否对某一疾病的致病原因时,我们可以把病人的身高及体重换算成BMI值,再找出其数值及病发率是否有线性关联.不过,随着 ...
最新文章
- 机器学习集成学习与模型融合!
- [Js/Jquery]jquery插件开发
- angular元素属性绑定_【Angular】表单
- python【蓝桥杯vip练习题库】ADV-297快速排序
- c语言影碟出租程序设计总结,vc++影碟出租系统的设计与开发
- 分库分表的几种常见形式以及可能遇到的难题
- Ural 1519. Formula 1 优美的插头DP
- 在Mac OS X中配置Apache + PHP + MySQL 很详细
- 突然发现Windows 7 Ultimate中有个BUG,分享一下哈!
- 中文计算机语言编程优势,十种编程语言特点比较
- php酒店预订源码,如家快捷酒店预订源码 for php
- 中控考勤机忘记密码处理
- 教你如何快速成为一名Java初级程序员
- go报错# command-line-arguments undefined: *解决方案
- [Java]简单实现UDP
- 区分:让项目评测更加公开透明
- C++:继承(1)——public、protected、private继承
- 真正的摄影高手,构图高手
- 你懂黑客吗?黑客!=cracker
- 瑞星杀毒软件2008下载版,附用户ID及序列号
热门文章
- 预训练是 AI 未来所需要的全部吗?
- 「AI不惑境」深度学习中的多尺度模型设计
- 机器学习:线性回归简单有效,但是千万不要踩到雷区!
- 2019年了,中文分词到底该怎么做?中文分词十年方法大盘点(附下载)
- 学界 | 和清华大学自然语言处理与社会人文计算实验室一起读机器翻译论文
- 2019年中国智能制造的十大发展关键点
- SAP MM 工序委外流程初探
- Tensorflow— 下载google图像识别网络inception-v3并查看结构
- 2020年度中国生命科学十大进展公布 | 中国科协生命科学学会联合体
- 自动驾驶寒冬与否,关键看“芯”