8.Hystrix断路器

  

8.1.Hystrix简介

  在分布式环境中,许多服务依赖项中的一些必然会失败。Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。

Hystrix通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。

  Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。

  hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix,并使用了对应的卡通形象做作为logo。

8.2.服务雪崩效应 

  当一个请求依赖多个服务的时候:

  正常情况下的访问 :

  

  但是,当请求的服务中出现无法访问、异常、超时等问题时(图中的I),那么用户的请求将会被阻塞。

  

  如果多个用户的请求中,都存在无法访问的服务,那么他们都将陷入阻塞的状态中。

  

  Hystrix的引入,可以通过服务熔断和服务降级来解决这个问题。

8.3.Hystrix服务熔断服务降级 

  Hystrix服务熔断服务降级@HystrixCommand fallbackMethod

  熔断机制是应对雪崩效应的一种微服务链路保护机制。

  当某个服务不可用或者响应时间超时,会进行服务降级,进而熔断该节点的服务调用,快速返回自定义的错误影响页面信息。

  

  接下来我们设计一个测试:

  我们写一个新的带服务熔断的服务提供者项目 microservice-station-provider-hystrix-1004。

  注意:本质上是拷贝一个服务提供者,在上面添加Hystrix的配置即可,你也可以选择在原来的服务提供者(1001、1002、1003)上直接修改。

  把 配置和 代码 都复制一份到这个项目里

  

  

  然后修改

  第一步:在pom.xml文件里面添加hystrix依赖

 <dependency>

     <groupId>org.springframework.cloud</groupId>

     <artifactId>spring-cloud-starter-hystrix</artifactId>

 </dependency>

  第二步:application.yml修改下端口和实例名称

  port: 1004

  instance-id: microservice-ticket-hystrix:1004 #客户端实例名称

  第三步:启动类名称改成ticketProviderHystrixApplication_1004,以及加下注解支持 @EnableCircuitBreaker

  第四步:在控制层中新增 lockTicket() ,锁票方法

  /**
* 锁票业务
* @return
* @throws InterruptedException
*/
@ResponseBody
@GetMapping(value="/lockTicket")
@HystrixCommand(fallbackMethod="lockTicketFallback")
public Map<String,Object> lockTicket() throws InterruptedException{
Thread.sleep(2000);
Map<String,Object> map=new HashMap<String,Object>();
map.put("code", 200);
map.put("msg", "锁定的车票数据xxxxx");
return map;
} /**
* 模拟锁票超时 或者 系统故障的回调函数
* @return
* @throws InterruptedException
*/
public Map<String,Object> lockTicketFallback() throws InterruptedException{
Map<String,Object> map=new HashMap<String,Object>();
map.put("code", 500);
map.put("msg", "系统出错,稍后重试");
return map;
}

 第五步:测试

这里我正常访问 返回的是 200  锁定的车票数据xxxxx

但是我们这里Thread.sleep(2000) 模拟超时;

这里的话 我们加上@HystrixCommand注解 以及 fallbackMethod

表明这个方法我们再 没有异常以及没有超时(hystrix默认1秒算超时)的情况,才返回正常的业务数据;

否则,进入我们fallback指定的本地方法,我们搞的是500  系统出错,稍后重试,有效的解决雪崩效应,以及返回给用户界面

很好的报错提示信息;

在 microservice-ticket-consumer-80项目也要对应的加个方法,用于测试

  /**
* 锁票业务
* @return
*/
@SuppressWarnings("unchecked")
@GetMapping(value="/lockTicket")
@ResponseBody
public Map<String,Object> lockTicket(){
System.out.println("-----调用锁票远程服务接口---------");
return restTemplate.getForObject(URL+"/lockTicket/", Map.class); }

最后后我们来测试下;

先启动三个eureka,再启动带hystrix的provider,最后启动普通的consumer;

通过修改Thread.sleep(2000) 不同的睡眠时间,观察测试结果

浏览器:http://localhost/ticket/lockTicket

当设置睡眠时间为2000毫秒=时,结果如下

当去掉睡眠时间,测试结果如下:

通过上述测试,可以判定hystrix起到了服务降级熔断的作用!

8.4.Hystrix默认超时时间设置

Hystrix默认超时时间是1秒,我们可以通过hystrix源码看到,

找到 hystrix-core.jar com.netflix.hystrix包下的HystrixCommandProperties类

default_executionTimeoutInMilliseconds属性局势默认的超时时间

  

  

我们系统里假如要自定义设置hystrix的默认时间的话;

application.yml配置文件加上

 hystrix:

   command:

     default:

       execution:

         isolation:

           thread:

             timeoutInMilliseconds: 3000

修改成3秒  然后 我们代码里sleep修改成2秒测试;

测试结果:

OK 默认时间生效!

SpringCloud-day08-Hystrix断路器的更多相关文章

  1. Springcloud 整合Hystrix 断路器,支持Feign客户端调用

    1,在这篇博文中,已经大致说过了Springcloud服务保护框架 Hystrix在服务隔离,服务降级,以及服务熔断中的使用 https://www.cnblogs.com/pickKnow/p/11 ...

  2. SpringCloud之Hystrix断路器(六)

    整合Hystrix order-service pom.xml         <dependency> <groupId>org.springframework.cloud& ...

  3. SpringCloud之Hystrix断路器以及dashboard 属性详解

    1.自定义hystrixCommand: https://blog.csdn.net/u012702547/article/details/78032191?utm_source=tuicool&am ...

  4. 【微服务架构】SpringCloud之Hystrix断路器(六)

    一:什么是Hystrix 在分布式环境中,许多服务依赖项中的一些将不可避免地失败.Hystrix是一个库,通过添加延迟容差和容错逻辑来帮助您控制这些分布式服务之间的交互.Hystrix通过隔离服务之间 ...

  5. SpringCloud 进阶之Hystrix(断路器)

    1. Hystrix 断路器 Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败, 比如超时,异常等,Hystrix能够保证在一个依赖出问题的情况 ...

  6. SpringCloud的入门学习之概念理解、Hystrix断路器

    1.分布式系统面临的问题,复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败. 2.什么是服务雪崩? 答:多个微服务之间调用的时候,假设微服务A调用微服务B和微服务 ...

  7. 小D课堂 - 新版本微服务springcloud+Docker教程_5-04 feign结合hystrix断路器开发实战下

    笔记 4.Feign结合Hystrix断路器开发实战<下>     简介:讲解SpringCloud整合断路器的使用,用户服务异常情况     1.feign结合Hystrix       ...

  8. 小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上

    笔记 3.Feign结合Hystrix断路器开发实战<上>     简介:讲解SpringCloud整合断路器的使用,用户服务异常情况 1.加入依赖          注意:网上新旧版本问 ...

  9. springcloud费话之断路器(hystrix in feign)

    目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...

  10. SpringCloud学习笔记(七):Hystrix断路器

    概述 什么时候需要断路器?熔断? 举个简单的例子:小明喜欢小美,可是小美没有电话,小美给了小明家里的座机,小明打给座机,这个时候小美的妈妈接到了,小明怕妈妈知道自己喜欢小美,就跟小美妈妈说让小美哥接电 ...

随机推荐

  1. go 语言之 生产者消费模型

    简易的生产者消费模型,通过管道[也可以理解为队列],管道是先进先出,主要是理解chan 生产者使用make将chan初始化,并且设置chan长度,如果不设置,生产者就写入不了通道 go 是使用线程开始 ...

  2. 《重构-改善既有代码的设计》学习笔记----Extract Method(提炼函数)

    看见一个过长的函数或者需要一段注释才能让人理解的代码,可以考虑将这段代码放进一个独立函数中. 创造一个新的函数,根据这个函数的意图来对它命名(以它“做什么”来命名,而不是以它“怎么做”命名). 需要重 ...

  3. MySQL中InnoDB锁不住表的原因

    MySQL中InnoDB锁不住表是因为如下两个参数的设置: mysql> show variables like '%timeout%'; +-------------------------- ...

  4. securecrt 方向键乱码解决

    1 下载安装包rlwrap: rlwrap-0.30.tar.gz     http://utopia.knoware.nl/~hlub/uck/rlwrap/   2  install rlwrap ...

  5. New Journey--工作五年所思所感小记

    正式参加工作满五年了,2013年7月9日走入游戏行业.之前就计划着应该提笔写点什么留下来,但当日子真的到了,竟是不知说些什么了.14年年中的时候我曾写过一篇工作一年的总结,现在回头读起来,还真是别有一 ...

  6. 试用 Angular v6 的 Ivy compiler

    “Ivy” 是 Angular v6 的新一代渲染器.从 v6.0.0-beta.1 开始,Ivy 已经作为体验 API 发布. 作为下一代的 Angular 的视图引擎,重点在于彻底缩减代码尺寸并增 ...

  7. 整理Xen理论知识

    XEN 简介 XEN 是一个基于X86架构.发展最快.性能最稳定.占用资源最少的开源虚拟化技术.Xen可以在一套物理硬件上安全的执行多个虚拟机,与 Linux 是一个完美的开源组合,Novell SU ...

  8. css常见布局问题

    1.如何实现一个盒子在页面中上下左右居中 方法一:(盒子宽高固定时) .box{ width:400px; height:200px; background:#000; position:absolu ...

  9. 网易云和QQ音乐api

    最近有点闲,听歌的时候遇见好听的想下载却遇到尴尬的事,版权!唉,知道我干什么了吧 网易云音乐 获取排行榜中的歌曲列表 https://music.163.com/discover/toplist?id ...

  10. zabbix 邮件报警配置

    zabbxi 邮件告警推送有两种方式: 1.使用zabbix服务端的本地邮箱账号发送,邮件名为:user@hostname.localdomain,user为发送邮件的用户,hostname为zabb ...