嗡汤圆的Spring Cloud自学(PART.3):API熔断与监控(hystrix)
前言结合上篇博客”嗡汤圆的Spring Cloud自学(PART.2):eureka服务注册与代理端使用” 中API服务代理的使用,我们将用户请求交由代理完成API调用以及后端的负载均衡。同时,通过代理,我们也可以很方便的将后端的异常捕获并处理。比如发生后端API错误,或者后端无可用的微服务的情况时的异常处理,我们称之为API熔断(Circuit Break),起到保护客户端与代理间程序正常运行
前言
结合上篇博客”嗡汤圆的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图形界面将出现熔断的请求。
更多推荐
所有评论(0)