一、概述

  参看地址: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保护应用-简介,使用,健康指标等的更多相关文章

  1. spring cloud: Hystrix(三):健康指数 health Indicator

    spring cloud: Hystrix(三):健康指数 health Indicator ribbon+hystrix 当使用Hystrix时(spring-cloud-starter-hystr ...

  2. 吴裕雄--天生自然 python数据分析:健康指标聚集分析(健康分析)

    # This Python 3 environment comes with many helpful analytics libraries installed # It is defined by ...

  3. Hystrix针对不可用服务的保护机制以及引入缓存

    之前我写过一篇博文,通过案例了解Hystrix的各种基本使用方式,在这篇文章里,我们是通过Hystrix调用正常工作的服务,也就是说,Hytrix的保护机制并没有起作用,这里我们将在HystrixPr ...

  4. Spring Cloud与微服务构建:Spring Cloud简介

    Spring Cloud简介 微服务因该具备的功能 微服务可以拆分为"微"和"服务"二字."微"即小的意思,那到底多小才算"微&q ...

  5. SpringCloud微服务简介(一)

    Spring Cloud简单认识 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及部署,并通过 ...

  6. [翻译]Hystrix wiki–How it Works

    注:本文并非是精确的文档翻译,而是根据自己理解的整理,有些内容可能由于理解偏差翻译有误,有些内容由于是显而易见的,并没有翻译,而是略去了.本文更多是学习过程的产出,请尽量参考原官方文档. 流程图 下图 ...

  7. 《Spring Cloud》学习(三) 容错保护!

    在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身间题出现调用故障或延迟,而 ...

  8. Hystrix 使用手册 | 官方文档翻译

    由于时间关系可能还没有翻译全,但重要部分已基本包含 本人水平有限,如有翻译不当,请多多批评指出,我一定会修正,谢谢大家.有关 ObservableHystrixCommand 我有的部分选择性忽略了, ...

  9. Spring Boot,Spring Cloud,Eureka,Actuator,Spring Boot Admin,Stream,Hystrix

    Spring Boot,Spring Cloud,Eureka,Actuator,Spring Boot Admin,Stream,Hystrix 一.Spring Cloud 之 Eureka. 1 ...

随机推荐

  1. eclipse配置代码自动补全auto-completion

    你如果使用的是JAVA EE的模式,就这样配置: 1. Window>Preferences>Java>Editor>Content Assist>Auto Activa ...

  2. cocos2dx位图字体bitmapfont使用

    参考此文,http://www.cocos2dres.com/post/87.html 在cocosbuilder里使用时有几个注意事项 1.中文保存时选择unicode 2.导出时选择 text 3 ...

  3. codeforces 825F F. String Compression dp+kmp找字符串的最小循环节

    /** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: d ...

  4. linux查杀病毒的几个思路

    1.  tmp 目录下面 2. 定时任务查找一下 crontab -e 3. 病毒要下载 ps -ef|egrep "curl|wget"  查看是否有下载的命令 4. top 一 ...

  5. 技巧C#

    1.     在CallBack之后保持滚动条的位置: 在Asp.Net1.1中,CallBack之后保持滚动条的位置是一件非常痛苦的事情,特别是页中有一个Grid并且想要编辑特定的行.为了不停留在想 ...

  6. Request的属性和防止图片被盗链

    Request.AppRelativeCurrentExecutionFilePath,获取当前执行请求相对于应用根目录的虚拟路径,以~开头,比如"~/default.ashx" ...

  7. 配置管理之PackageProvider接口

     PackageProvider的开始 从前面几章中我们了解到了一点:想知道如何加载相关配置文件就必须去找StrutsXmlConfigurationProvider类和XmlConfiguratio ...

  8. 报错An internal error occurred during: "reload maven project". java.lang.NullPointerException

    新建了一个maven项目,由于有问题就删除了,但是卡住了就强制关闭了. 查了一下是由于由于没有正常关机导致eclipse无法将数据正常写入配置文件导致无法启动.所以报这样一个异常. 最后是这样解决的: ...

  9. select标签设置只读的方法(下拉框不可选但可传值)

    1. <select id="s1" name="s1" onfocus="this.defaultIndex=this.selectedInd ...

  10. 53、Gif 控件GifView 的使用,播放gif图片

    GifView 是一个为了解决android中现在没有直接显示gif的view,只能通过mediaplay来显示这个问题的项目,其用法和 ImageView一样,支持gif图片.可监视GIF是否加载成 ...