Hystrix Dashboard:Hystrix监控界面
前言
Hystrix Dashboard 是Spring Cloud中查看Hystrix实例执行情况的一种仪表盘组件,支持查看单个实例和查看集群实例,这种监控效果对能够及时发现错误有很好的效果。
一、Hystrix 单个实例监控
在pom.xml中添加相关依赖,在application.yml进行配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
server:
port: 8501
spring:
application:
name: hystrix-dashboard
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8001/eureka/
这里我们要用到一个相关注解@EnableHystrixDashboard,这个注解加在启动类上,能够启用监控功能,就和很多Enable开头的注解一样,我们在平时的时候需要去收集这样的注解,这样用起来才会得心应手。
@EnableHystrixDashboard
@EnableDiscoveryClient
@SpringBootApplication
public class HystrixDashboardApplication {
public static void main(String[] args) { SpringApplication.run(HystrixDashboardApplication.class, args);
}
}
这次我们需要启动如下服务:eureka-server、user-service、hystrix-service、hystrix-dashboard,启动后注册中心显示如下:
然后访问Hystrix Dashboard:http://localhost:8501/hystrix,我们就能去打开Hystrix Dashboard界面。
还有就是被监控的hystrix-service服务需要开启Actuator的hystrix.stream端点,配置信息如下:
management:
endpoints:
web:
exposure:
include: 'hystrix.stream' #暴露hystrix监控端点
调用hystrix-service接口:http://localhost:8401/user/testCommand/1,这里建议多调用几次,这样我们就可以了解连接的情况。
我们之前在@HystrixCommand中添加的commandKey和threadPoolKey属性都显示在上面了,并且我们调用了7次,最终都成功了,我们需要关注颜色,颜色有对应的说明,这些对应说明的颜色和相同数字颜色代表的数字是相关联的,比如红色代表的含义是Failure,那么红色对应的数字是0,也就意味着调用失败的次数是0。
下面就对界面进一步去进行解释,我们一起来看一看具体代表了什么内容。
二、Hystrix 集群实例监控
依赖是和上面一样的,但是在application.yml进行配置,主要是添加了Turbine相关配置,这个是和集群相关的。
server:
port: 8601
spring:
application:
name: turbine-service
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8001/eureka/
turbine:
app-config: hystrix-service #指定需要收集信息的服务名称
cluster-name-expression: new String('default') #指定服务所属集群
combine-host-port: true #以主机名和端口号来区分服务
这次在启动类上,我们要满足集群的功能,所以我们加的注解和上次是不一样的,在启动类上添加@EnableTurbine来启用Turbine相关功能。
@EnableTurbine
@EnableDiscoveryClient
@SpringBootApplication
public class TurbineServiceApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineServiceApplication.class, args);
}
}
下面的流程包括启动服务,进行接口调用,还有去dashboard去查看接口调用情况,其实和上面是一样的,我就不过多地详细地去重复解释。
总结
这就是Hystrix Dashboard 的功能,我们用到了如下的服务。
- eureka-server – eureka注册中心
- user-service – 提供User对象CRUD接口的服务
- hystrix-service – hystrix服务调用测试服务
- turbine-service – 聚合收集hystrix实例监控信息的服务
- hystrix-dashboard – 展示hystrix实例监控信息的仪表盘
这就是我们要用到的服务,在上面的内容中我们一一地讲述了,其实我们发现这就是spring cloud框架的好处,其实我们全程都没有书写太多代码,框架已经封装好了技术栈,我们只是需要调用就能够满足业务需求。所以说Java程序员是很幸福的,但是也是没有竞争力的,因为你做的事情刚出校门年轻人也能做,那么我介绍这块目的是什么呢,就是告诉大家,有的东西其实已经封装好了,我们要么是像那些大公司一样去解析底层源码,然后优化底层,然后自己创一个框架,但是这其实意义不大,我们要做的是去创造,比如一个微服务架构就是脱颖于Spring Boot,我们现在写前后端分离,发现go语言其实比Java语言更加有优势,但是语法很相似,希望大家在学习Java的同时,去学习一下C语言,因为程序员的最终目的并不是去拿多少钱,而是根据自己所学去进行创造,或者定义一种规范,语言从面向过程,到面向对象,未来未必不可以从面向对象到面向系统,系统将对象和过程整合在一起,我们可以根据过程逆向得到对象,也能根据对象得到过程,其实我们目前已经见证了,但是还很粗浅,如果我们最终能够完成双逆向,那个时候我们的编程会更加接近生活的日常语句,人类最伟大的创造就是将不熟悉变成熟悉,如果未来我们的程序语言像日常交流一样简单,那么作为一个程序员将是一件更加幸福的事情。