您的位置:首页 > 编程语言 > Java开发

嗡汤圆的Spring Cloud自学(PART.3):API熔断与监控(hystrix)

2016-10-13 21:59 911 查看

前言

结合上篇博客”嗡汤圆的Spring Cloud自学(PART.2):eureka服务注册与代理端使用” 中API服务代理的使用,我们将用户请求交由代理完成API调用以及后端的负载均衡。

同时,通过代理,我们也可以很方便的将后端的异常捕获并处理。比如发生后端API错误,或者后端无可用的微服务的情况时的异常处理,我们称之为API熔断(Circuit Break),起到保护客户端与代理间程序正常运行的目的。本文通过Hystrix实现API熔断机制。

Hystrix支持

添加Hystrix支持

在代理应用依赖POM中添加对hystrix的依赖。

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


并在应用代码入口处,添加注解
@EnableCircuitBreaker
即可完成熔断特性的添加。

对API添加熔断机制

即通过注解的方式对RestMapping映射的方法添加错误处理fallback。事例代码如下:

public Collection<String> getReservationNamesFallback(){
return Collections.emptyList();
}

@HystrixCommand(fallbackMethod="getReservationNamesFallback")
@RequestMapping("/names")
public Collection<String> getReservationNames(){
ParameterizedTypeReference<Resources<Reservation>> ptr =
new ParameterizedTypeReference<Resources<Reservation>>() { };
String url = discoveryClient.getInstances("reservation-service").get(0).getUri()+"/reservations";
ResponseEntity<Resources<Reservation>> responseEntity =
this.restTemplate.exchange(url,
HttpMethod.GET, null, ptr);
return responseEntity
.getBody()
.getContent()
.stream()
.map(Reservation::getReservationName)
.collect(Collectors.toList());
}


此处是之前API代理处理中间请求的代码,现在假设处理中间请求的过程当中发生异常时,我们通过
getReservationNamesFallback
返回空列表,而不是抛出异常。

实例演示

我们模拟后端微服务异常退出的情况,关闭
reservation-service
应用,此时代理通过eureka查询reservation-service服务时将无法找到可用服务器。因此在没有Hystrix熔断是,代理会返回HTTP 500异常。如下三幅图所示:

1)API代理正常



2)后端无服务,无熔断处理



3)后端无服务员,熔断处理



hystrix监控

Spring提供了hystrix-dashboard项目对支持hystrix熔断的项目提供链路状态监视的功能。

构建hystrix-dashboard项目

通过start.spring.io构建,勾选
hystrix dashboard
config-client
eureka discovery
即可。POM文件省略。

修改application.properties文件指定端口。

在应用入口处添加注解
@EnableHystrixDashboard
即可启动应用。

监控

hystrix dashboard主页面

假设该应用部署于8010端口,则访问
http://localhost:8010/hystrix
即可打开hystrix主页面。



代理端的hystrix监控流

在支持hystrix监控的项目中,输入hystrix.stream即可得到监控流信息,如
http://localhost:8800/hystrix.stream




将该地址输入hystrix主页的输入框中,即可已图形形式观察代理的运行情况。



上图可以看出该API代理的两个接口调用情况,和线程池状态信息。

当我们关闭后台微服务reservation-service后,该代理将被熔断,此时hystrix图形界面将出现熔断的请求。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息