介绍

使用微服务架构实现大型项目的过程中,经常会对一个大而全的系统拆分成多个较小的服务单元,各个服务单元之间通过注册和订阅的方式,了解对方的状态,相互依赖。每一个服务单元运行在一个单独的进程中。各个服务单元在相互调用的过程中,会出现各种各样的不可用情况,如网络不可用,服务单元的进程挂掉了,服务单元内部的实现性能有问题等等。如果高并发高并发的情况下,挂起的服务单元一直占用系统资源不及时释放,就会导致系统资源耗尽,从而导致整个系统出现问题。hystrix的出现,就是为了解决这种问题的,它提供了故障监控。如果出现故障,Hystrix可以帮助系统快速调用一个异常处理模块,快速失败,快速释放系统资源,避免了故障的蔓延,从而避免的系统雪崩的危害。

如何让自己的功能得到Hystrix的支持?

需要完成下面的步骤:

1).添加Hytrix的maven依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

2).在启动类中添加注解

启动类中需要添加@EnableCircuitBreaker

3).在需要高可用的模块中添加相应的注解和回调函数

@ResponseBody
@GetMapping("/list")
@HystrixCommand(fallbackMethod="listFallBack")
public User[] list(){
    System.out.println("list-->"+Thread.currentThread().getId());
    User[] list = restTemplate.getForObject("http://spring-cloud-provider/user/list", User[].class);
    return list;
}

public User[] listFallBack(){
    System.out.println("listFallBack-->"+Thread.currentThread().getId());
    return new User[]{};
}

当list函数出现性能问题,执行速度太慢,响应太慢的时候就会直接调用listFallBack函数