嗡汤圆的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图形界面将出现熔断的请求。
相关文章推荐
- springcloud hystrix(监控、熔断、降级)
- SPRINGCLOUD-熔断监控HYSTRIX DASHBOARD和TURBINE
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
- springcloud(5):熔断监控Hystrix Dashboard和Turbine
- Spring Boot + Spring Cloud 构建微服务系统(五):熔断监控面板(Hystrix Dashboard)
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
- springcloud(五):熔断监控Hystrix Dashboard和Turbine 2017/05/18
- Spring Cloud构建微服务架构:Hystrix监控面板
- SpringCloud之断路器聚合监控Spring Cloud Hystrix Turbine实例
- 嗡汤圆的Spring Cloud自学(PART.2):eureka服务注册与代理端使用
- Spring Cloud Learning | 第七篇:断路器监控仪表盘(Hystrix Dashboard)
- springCloud(12):使用Hystrix实现微服务的容错处理-Hystrix的监控
- spring cloud Hystrix 服务容错保护监控(二)
- SpringCloud关于@FeignClient和Hystrix集成对http线程池监控问题
- Spring cloud系列十二 监控Hystrix界面:Hystrix dashboard 和 Turbine
- 嗡汤圆的Spring Cloud自学(PART.1):统一配置管理(Cloud-config)
- springcloud实战之8 断路器-仪表盘-单例监控(Hystrix)