转载声明 : 该文章出处为 扛麻袋的少年
本文目录:
写在开头
接上一篇文章:Spring Cloud 整合 Hystrix 实现服务降级、服务熔断、服务限流。除了 服务降级
、 服务熔断
、 服务限流
等服务以外,Hystrix 还提供了 准实时的调用监控(Hystrix Dashboard)
,Hystrix 会持续地记录所有通过 Hystrix 发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求,多少成功,多少失败等。
Netflix 通过 hystrix-metrics-event-stream 项目实现了对以上指标的监控。同时 Spring Cloud 也提供了对 Hystrix Dashboard 的整合,将监控的内容信息转化成可视化界面。
1.Hystrix Dashboard 的使用
1.1 操作Hystrix Dashboard模块
在使用 Hystrix Dashboard 时,需要以单独工程的方式运行。以下就是 Hystrix Dashboard 的使用流程。
Ⅰ. 创建工程
使用 maven 的方式创建一个模块,将其命名为:cloud-consumer-hystrix-dashboard9001
,用来完成 Hystrix Dashboard 的部署。
Ⅱ. pom.xml 依赖
<!--引入 hystrix dashboard 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
Ⅲ. 修改application.yml 配置
# 仅定义一个端口号即可,并不需要将其注册到 Eureka 等
server:
port: 9001
Ⅳ. 在启动类上添加 @EnableHystrixDashboard 注解
@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardMain9001 {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardMain9001.class,args);
}
}
Ⅴ. 被监听的服务提供者,都需要添加actuator依赖
该依赖一般情况是配合 spring-boot-starter-web
同时使用,该模块主要用来完成对 服务的健康监控
。在生产环境中,需要实时或定期监控服务的可用性。Spring Boo t的 actuator(健康监控)功能提供了很多监控所需的接口,可以对应用系统进行配置查看、相关功能统计等。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Ⅵ. 启动Hystrix Dashboard模块
启动 Hystrix Dahsboard 模块项目,我们访问 http://localhost:9001/hystrix ,就能够看到 Hystrix Dashboard 豪猪哥
的监控页面了。
1.2 操作服务提供
模块
以下内容,是需要在 服务提供模块
进行配置。
Ⅰ. 配置Hystrix 指定监控路径
注意:
新版本 Hystrix 需要在主启动类中指定监控路径
,如果没有此项操作,在项目启动后,Hystrix Dashboard 会报: Unable to connect to Command Metric Stream
这样一个错误。配置内容如下:
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class PaymentHystrixMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentHystrixMain8001.class,args);
}
//在主启动类中指定监控路径
@Bean
public ServletRegistrationBean getServlet(){
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
}
Ⅱ. 开启监控
将 服务注册中心(7001端口)
、服务提供方(8001端口)
、Hystrix Dashboard(9001端口)
模块进行启动。然后通过 Hystrix Dashboard 9001 来监控服务端 8001。需要在 Hystrix Dashboard 中填写 监控地址
:http://localhost:8001/hystrix.stream,并完成图中四部曲:
开启监控,所以服务都启动 ok 的话,你会看到如下界面。到此处说明配置 OK
Ⅲ. 监控测试
服务接口:http://localhost:8001/payment/circuit/{id}
。当 id > 0,进行正常操作流程。当 id < 0,报异常进入 服务降级
方法。
此处配置的服务熔断规则为:
在 10s 内,10次请求如果失败率 > 60%,此时断路器开关打开,整个服务不可用。随着请求正确率的提升,服务也会逐渐恢复。
//服务熔断
@HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback",commandProperties = {
@HystrixProperty(name = "circuitBreaker.enabled",value = "true"), //是否开启断路器
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"), //请求次数
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"), //时间范围
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"), //失败率达到多少后跳闸,此处为60%(上面配置意思是:10秒钟内,10次请求,失败率60%就不让用了)
// 这些参数的配置,在 HystrixCommandProperties.java 类中
})
public String paymentCircuitBreaker(@PathVariable("id") Integer id){
if (id < 0){
throw new RuntimeException("*****id 不能负数");
}
String serialNumber = IdUtil.simpleUUID();
return Thread.currentThread().getName()+"\t"+"调用成功,流水号:"+serialNumber;
}
public String paymentCircuitBreaker_fallback(@PathVariable("id") Integer id){
return "id 不能负数,请稍候再试,(┬_┬)/~~ id: " +id;
}
当我们输入id > 0 时,请求正常(断路器状态:Closed
)。当输入 id < 0,连续发送请求,满足 10s 内,10次请求如果失败率 > 60%,此时断路器开关打开(断路器状态:Closed → Open)
。此时再次输入 id > 0 时,由于整个服务不可用,还是会进入到 服务降级
方法。连续多次发送 id > 0 请求,此时正确率逐渐提高,服务也会逐渐恢复(断路器状态:Opend → Close)
,监控如下图所示。
2.Hystrix Dashboard 图解
看着上图所有内容,有没有一脸懵逼。哈哈,接下来就对监控页面各个内容做一些简单的介绍。监控页面可以划分为:7色
、1圈
、1线
。
本文代码下载地址:Hystrix Dashboard 的使用(提取码:b07u )
下一篇:Spring Cloud Gateway 微服务新一代网关