1.Hystrix断路器简介

Hystrix断路器简介

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

  在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。

2.服务雪崩效应

服务雪崩效应

 

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

正常情况下的访问 

springcloud-知识点总结(三):Hystrix & Dashboard & turbine & Zuul & SpringCloud Config

 

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

springcloud-知识点总结(三):Hystrix & Dashboard & turbine & Zuul & SpringCloud Config

 

 

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

springcloud-知识点总结(三):Hystrix & Dashboard & turbine & Zuul & SpringCloud Config

 

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

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

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

 

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

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

 

我们写个项目来测试下;

 

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

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

 

然后修改;

 

1,pom.xml加下 hystrix支持

<dependency>

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

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

</dependency>

 

2,application.yml修改下端口和实例名称

port: 1004

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

 

3,启动类名称改成StudentProviderHystrixApplication_1004

以及加下注解支持 @EnableCircuitBreaker

 

4,我们在( microservice-student-provider-hystrix-1004)新增方法getInfo

 1  /**
 2  * 获取信息
 3  * @return
 4  * @throws InterruptedException 
 5  */
 6 @ResponseBody
 7 @GetMapping(value="/getInfo")
 8 @HystrixCommand(fallbackMethod="getInfoFallback")
 9 public Map<String,Object> getInfo() throws InterruptedException{
10     Thread.sleep(2000);
11     Map<String,Object> map=new HashMap<String,Object>();
12     map.put("code", 200);
13     map.put("info", "业务数据xxxxx");
14     return map;
15 }
16  
17 public Map<String,Object> getInfoFallback() throws InterruptedException{
18     Map<String,Object> map=new HashMap<String,Object>();
19     map.put("code", 500);
20     map.put("info", "系统出错,稍后重试");
21     return map;
22 }
View Code

相关文章: