Spring Cloud集成了Netflix开源的Hystrix组件,该组件实现了熔断器模型,能够让我们很方便地实现熔断器。
在实际项目中,一个请求经常会调用多个服务,如果较底层的服务出现故障,将会发生连锁反应,这对于一个大型项目是灾难性的。因此,为了避免连锁反应的发生,当特定的服务不可用达到阈值( Hystrix默认5秒20次)时,我们需要利用 Hystrix组件打开熔断器。
Hystrix提供了熔断、隔离、监控等功能,当一个或多个服务同时出现问题时,可以保证系统依然可用。
Spring Cloud Netflix Hystrix的使用
===============================
在本书搭建框架的时候,读者就已经接触到了Hystrix组件,对于Spring Cloud微服务工程来说,会默认开启熔断器。我们在应用程序入口类中都加入了@SpringCloudApplication 注解,该注解内部包含了@EnableCircuitBreaker注解,它的作用就是启用熔断器。因此,每个基于Spring Cloud的微服务工程都必须添加spring-cloud-starter-netflix-hystrix依赖。
下面我们就通过一个简单的例子感受一下Hystrix的魅力。
在test工程创建一个TestHystrixCommand类并编写以下代码:
public class TestHystrixCommand extends HystrixCommand{
public TestHystrixcommand (string groupKey)i
super(HystrixcommandGroupKey.Factory.asKey(groupKey));
}
@override
protected String run() {
//模拟HTTP请求成功return“请求成功!";
)
@override
protected String getFallback( {
return“服务器异常!“;
}
}
在上述代码中,我们自定义的TestHystrixCommand类继承了HystrixCommand类并实现了run和getFallback方法。其中 HystrixCommand就是Hystrix组件提供的用于调用服务( run)和处理异常( getFallback)的类。我们在run方法中直接返回了一个字符串,主要目的是模拟请求,在实际中,该方法体应该实现真正的HTTP网络请求,当服务调用超时或不可用时就会调用getFallback方法。
接下来编写控制器方法以调用HystrixCommand类,在TestController中增加以下代码:
@Requ