1.Hystrix断路器简介
Hystrix断路器简介
hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix,并使用了对应的卡通形象做作为logo。
在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。
2.服务雪崩效应
服务雪崩效应
当一个请求依赖多个服务的时候:
正常情况下的访问
但是,当请求的服务中出现无法访问、异常、超时等问题时(图中的I),那么用户的请求将会被阻塞。
如果多个用户的请求中,都存在无法访问的服务,那么他们都将陷入阻塞的状态中。
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 }