springcloud-断路器hystrix
Netflix的创造了一个调用的库 Hystrix 实现了断路器。在微服务架构中,通常有多层服务调用。

底层服务出现故障可能导致用户级联故障。当调用特定服务达到一定阈值时(Hystrix中的默认值为5秒内的20次故障),电路打开,不进行通话。在开路的情况下,可以使用备用的方法进行处理。如下图:

当服务B挂掉或者访问超时后,调用Fallback
1、pom依赖:
<dependency>
<!-- hystrix 断路器 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
注意:一定要加上commons-lang3的依赖,不然在访问的时候,会报找不到 org.apache.commons.lang3.Validate 类的异常
2、入口加上@EnableCircuitBreaker注解,启动断路器
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker //开启断路器
public class ConsumerApplication { public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
} }
3、使用RestTemplate调用远程服务
@RestController
public class IndexController { @Autowired
private RestTemplate restTemplate; @GetMapping("/find/{id}")
public UserEntity findById(@PathVariable Long id) {
return restTemplate.getForObject("http://service-provider/find/" + id, UserEntity.class);
} /**
* 测试hystrix
*
* 1、调用远程服务超时后,断路器打开,调用getOneFallBack (如果远程服务挂了,会立马调用getOneFallBack,超时时间不起作用)
* 2、超时时间为2000毫秒(默认1秒)
*/
@GetMapping("/getOne/{id}")
@HystrixCommand(fallbackMethod = "getOneFallBack", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "") })
public UserEntity getOne(@PathVariable Long id) {
UserEntity user = restTemplate.getForObject("http://service-provider/find/" + id, UserEntity.class);
return user;
} /**
* 参数跟返回类型必须跟上面的一样,不然会报找不到该方法的错
*/
public UserEntity getOneFallBack(Long id) {
UserEntity user = new UserEntity();
user.setId("");
user.setAge();
return user;
} }
@HystrixCommand由名为“javanica”的Netflix contrib库提供 。Spring Cloud在连接到Hystrix断路器的代理中使用该注释自动包装Spring bean。断路器计算何时打开和关闭电路,以及在发生故障时应该做什么。该注解属性较多,下面讲解常用的几个:
1、fallbackMethod 降级方法
2、commandProperties 普通配置属性,可以配置HystrixCommand对应属性,例如采用线程池还是信号量隔离、熔断器熔断规则等等
对于hystrix的配置,也可以在yml文件中配置。如:
hystrix:
command:
default:
execution:
timeout:
enabled: true #是否开启超时(默认开启)
isolation:
thread:
timeoutInMilliseconds: #超时时间(默认1000毫秒)
测试结果:
1、service-provider正常时,返回结果正常
2、service-provider挂掉时,立马调用降级方法 getOneFallBack
3、service-provider的rest服务设个断点,即调用远程服务超过设置的超时时间(先读commanProperties,没配置再读yml文件配置)后,开始 调用getOneFallBack
Hystrix仪表板
只要启用了hystrix功能,就会暴露一个端点hystrix.stream 。访问 http://localhost:18082/hystrix.stream 可以查看详细的数据

注:这个页面会实时不断输出新的内容(如果有的话),首次访问的话,会看到一直ping...,但是没有任何内容,说明这时服务对应的方法没人调用,可以访问getOne方法后,再来看这个页面。
显然,一堆密密麻麻的文字,没有人会喜欢看,spring-cloud早就想到这一点了,提供了一个hystrix-dashboard的功能,可以用图形化的界面来解读这些数据。
具体做法:
1、增加pom依赖:
<dependency>
<!-- hystrix-dashboard 断路器仪表板 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
2、在入口开启仪表板

3、启动成功后,访问 http://localhost:18082/hystrix,出现仪表板首页:

4、配置好后,点击 Monitor Stream按钮,出现监控数据:

每个指标的含义如下图:

springcloud-断路器hystrix的更多相关文章
- SpringCloud断路器(Hystrix)和服务降级案列
断路器(Hystrix) 为什么需要 Hystrix? 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC).为了保证其高可用,单个服务又必须集群部署.由于网络原因或者自 ...
- SpringCloud断路器(Hystrix)
一.为什么需要 Hystrix? 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC).为了保证其高可用,单个服务又必须集群部署.由于网络原因或者自身的原因,服务并不能保 ...
- SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)
前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netfl ...
- SpringCloud IDEA 教学 (四) 断路器(Hystrix)
写在开始 在SpringCloud项目中,服务之间相互调用(RPC Remote Procedure Call —远程过程调用),处于调用链路底层的服务产生不可用情况时,请求会产生堆积使得服务器线程阻 ...
- 高并发场景-请求合并(一)SpringCloud中Hystrix请求合并
背景 在互联网的高并发场景下,请求会非常多,但是数据库连接池比较少,或者说需要减少CPU压力,减少处理逻辑的,需要把单个查询,用某些手段,改为批量查询多个后返回. 如:支付宝中,查询"个人信 ...
- 【Spring Cloud笔记】 断路器-hystrix
在微服务架构中,一个微服务的超时失败可能导致瀑布式连锁反映,Spring Cloud Netflix 的断路器Hystrix通过自主反馈,防止了这种情况发生.下面介绍简单的断路器使用方法. [step ...
- spring cloud学习(五)断路器 Hystrix
断路器 Hystrix 断路器模式 (云计算设计模式) 断路器模式源于Martin Fowler的Circuit Breaker一文. 在分布式环境中,其中的应用程序执行访问远程资源和服务的操作,有可 ...
- springcloud之Hystrix
1.Hystrix出现的背景 从上面看来,Hystrix避免了雪崩效益,对于失败的服务可以快速失败. 2.为了解决雪崩效应的解决方案: (1)超时机制 (2)断路器模式Hystrix 3.Hystri ...
- 004声明式服务调用Feign & 断路器Hystrix
1.POM配置 和普通Spring Boot工程相比,添加了Eureka Client.Feign.Hystrix依赖和Spring Cloud依赖管理 <dependencies> &l ...
- 断路器Hystrix与Turbine集群监控-Spring Cloud学习第三天(非原创)
文章大纲 一.Hystrix基础介绍二.断路器Hystrix简单使用三.自定义Hystrix请求命令四.Hystrix的服务降级与异常处理五.Hystrix的请求缓存与请求合并六.Hystrix仪表盘 ...
随机推荐
- Elasticsearch 核心插件Kibana 本地文件包含漏洞分析(CVE-2018-17246)
不久前Elasticsearch发布了最新安全公告, Elasticsearch Kibana 6.4.3之前版本和5.6.13之前版本中的Console插件存在严重的本地文件包含漏洞可导致拒绝服务攻 ...
- Abp mvc angular 添加视图
在LawAndRegulation项目中添加导航路由(Abp添加菜单)对应的客户端页面. 创建文件 客户端页面在Abp模板项目中默认存放在Abp/Main/views文件夹下,在项目中我们创建属于字典 ...
- JQuery Mobile - 需要注意问题!
一,JQuery Mobile 和 JQuery 版本对接,一定要选用和当前JQuery Mobile 对应版本的JQuery . 二,在台式机的模拟器和真机中的显示结果可能不一样.我在台式机中使用的 ...
- Mac OS 10.12 - Gogland和在Windows中使用的不同!!
刚刚在Mac OS 10.12用Gogland写了一个小小的GO语言测试程序,经过一番尝试才算把Gogland配置好,写出这个测试程序!Gogland在Mac OS 10.12里和Windows里面确 ...
- Android应用安全防护和逆向分析 ——apk混淆成其他语言代码
现在很多人对于app的安全是越来越重视了,尤其是金融相关的行业,对于app的防范可是下足了功夫.各种加固,各种加密算法,层出不穷.我个人觉得,在安全技术这块,没有绝对安全的.也许今天这个技术起到了防范 ...
- poj2479 Maximum sum
http://poj.org/problem?id=2479 题目大意:给定一组n个整数:a ={a1, a2,…,我们定义一个函数d(a)如下: 你的任务是计算d(A).输入由T(<=30)测 ...
- iOS 代码混淆的简单使用
1.工具下载 http://stevenygard.com/projects/class-dump/ 选择dmg安装包 2.打开终端输入:open/usr/local/bin 3. 4.修改权限在 ...
- jq01--概述
jq:jQuery,是一个JavaScript函数库,为了简化js开发与编码而封装的js库,是一个“写得更少,做得更多”的js函数库,为事件处理而特别设计的.现在我们来学习一下它. 1.jq库:为事件 ...
- [转]SQL的主键和外键约束
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...
- margin折叠及hasLayout && Block Formatting Contexts
margin折叠的产生有几个条件: 这些margin都处于普通流中,并在同一个BFC中: 这些margin没有被非空内容.padding.border 或 clear 分隔开: 这些margin在垂直 ...