Netflix的创造了一个调用的库Hystrix实现了断路器图案。在微服务架构中,通常有多层服务调用。较低级别的服务中的服务故障可能导致用户级联故障。当对特定服务的呼叫达到一定阈值时(Hystrix中的默认值为5秒内的20次故障),电路打开,不进行通话。在错误和开路的情况下,开发人员可以提供后备。开放式电路会停止级联故障,并允许不必要的或失败的服务时间来愈合。回退可以是另一个Hystrix保护的调用,静态数据或一个正常的空值。回退可能被链接,所以第一个回退使得一些其他业务电话又回到静态数据。
以上是Spring Cloud 对断路器Hystrix客户端的描述。官方文档的图片
对sevice-ribbon工程进行改造,pom文件添加依赖:
<!--spring-cloud-starter-hystrix的起步依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
在启动类上加注解;
@EnableHystrix
@EnableHystrixDashboard
调用服务的地方加上注解:
@HystrixCommand(fallbackMethod = “hiServiceError”) hiServiceError是调用远程服务出错的时候回调的方法。HelloService 添加方法:
public String hiServiceError(String name){
return name+“调用hiService失败”;
}
启动服务注册中心,启动service-ribbon,浏览器访问localhost:8761
可以看到只有一个消费者注册到注册中心。浏览器访问http://localhost:8764/hi?name=mms
能调用到远程服务。
断路器:Hystrix仪表板
Hystrix的主要优点之一是它收集关于每个HystrixCommand的一套指标。Hystrix仪表板以有效的方式显示每个断路器的运行状况。
前面已经将在pom添加了仪表板的起步依赖,也在启动类添加了相应的注解。浏览器访问http://localhost:8764/hystrix
在输入框输入http://localhost:8764/hystrix.stream,Tiitle输入任意字符,点击Montor Stream
可以看到hiService的是健康状态。
在Feign中使用断路由器:
同样在pom文件中添加添加依赖,application配置文件中添加配置feign.hystrix.enabled= true,在启动类上添加注解,@EnableHystrixDashboard,@EnableCircuitBreaker新建SayHiServiceFallBack实现SayHiService,重新sayHi方法,使用Spring注入。
/**
- @author heyaunjun
- @date 2017-11-6 11:02
*/
@Component
public class SayHiServiceFallBack implements SayHiService {
@Override
public String sayHi(String name) {
return name+“feign调用服务失败”;
}
}
SayHiService接口添加注解@FeignClient(value = “service-hi”,fallback = SayHiServiceFallBack.class).
验证方法和ribbon的验证方式一样。
未解决的问题:feign在使用断路由器的仪表版时,访问http://localhost:8764/hystrix会下载一个hystrix文件,文件大小时0kb。也无法看到服务的健康状态。
各种IT书籍书目及下载链接
https://blog.csdn.net/dh1027/article/details/89327978