老鸟飞过 , 学习使用,欢迎交流
Hystrix是一种服务熔断机制,其熔断降级策略有效的防止了微服务的雪崩问题,Hystrix的出现提高了微服务的可用性和健壮性,而Hystrix Dashboard则是用来监控Hystrix的熔断器状况的重要组件(又叫仪表盘),它提供了数据监控,健康状态,熔断状态,并发数量等等信息,和友好的图形化展示界面,能让使用者很好的监控和分析熔断器的状态。如:
Hystrix Dashboard仅支持单个微服务进行监控,在微服务架构的项目中有成百上千的微服务,这样我们就需要在每个微服务都集成Hystrix Dashboard,但是我们在查看每个微服务的监控信息的时候就需要打开每个微服务的Dashboard窗口进行查看,这样就显得极其不方便,Hystrix Turbine的作用就是把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示如
修改springlcoud-pay-server-1040 集成 Hystrix Dashboard
这里导入了hystrix的基础依赖:netflix-hystrix, 仪表盘的依赖:hystrix-dashboard ,以及微服务监控的依赖 :spring-boot-starter-actuator 如下:
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-hystrixartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboardartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
在主启动类打标签@EnableHystrixDashboard开启HystrixDashboard仪表盘,如下:
/**
* 支付的启动类
* @EnableFeignClients :开启Feign支持
*/
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients("cn.itsource.springboot.feignclient")
@EnableCircuitBreaker //开启熔断器
@EnableHystrixDashboard //开启HystrixDashboard仪表盘
public class PayServerApplication1040
{
public static void main( String[] args )
{
SpringApplication.run(PayServerApplication1040.class);
}
}
需要在配置文件中指定HystrixDashboard监控的端点路径,如下:
management:
endpoints:
web:
exposure:
include: "*"
注意:“*”代表监控所有的资源
依次启动服务,通过Feign实现服务调用之后,访问 http://localhost:1040/hystrix 出现如下界面:
解释:这里介绍了集群(Custom cluster)和单节点Hystrix监控(Single Hystrix)的访问路径,我们这里是基于单节点集成HystrixDashboard,所以在输入框中输入对应的url后,修改ip和端口,点击“Monitor Stream” ,进入如下界面:
注意:如果仪表盘中没有数据,那么会一直显示Loading..,只需要访问一下微服务,仪表盘即可采集到的数据,如果依然没有数据,那么需要检查是否开启了hystrix和托底(需要有方法熔断@HystrixCommand才会有效果)
图片中的数据意思如下:
现在我们可以通过Dashboard 对微服务的熔断情况做监控了,但是Dashboard 的缺点在于只能在单个服务中进行监控,如果我们需要对多个服务进行聚合监控就需要用到Turbine
Hystrix Turbine是微服务统一监控方案,那么就需要搭建独立的监控服务来聚合所有的Hystrix Bashboard的监控信息做统一的收集和展示。另外Turbine监控微服务也需要注册到EurekaServer.
基于SpringBoot搭建工程 - springcloud-hystrix-turbine-1050 ,效果如下
springcloud-parent
springcloud-hystrix-turbine-1050 //聚合监控服务
springcloud-eureka-server-1010
springcloud-order-server-1030
springcloud-pay-server-1040
springcloud-user-common
springcloud-user-server-1020
pom.xml
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboardartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-netflix-turbineartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
主配置类打标签:@EnableHystrixDashboard 和 @EnableTurbine
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrixDashboard
@EnableTurbine
public class TurbineServerApplication1050 {
public static void main(String[] args) {
SpringApplication.run(TurbineServerApplication1050.class);
}
}
配置文件除了微服务的基本配置外,加入turbine的如下配置:
turbine:
aggregator:
cluster-config: default #指定聚合哪些集群,多个使用”,”分割,默认为default
cluster-name-expression: new String("default") #指定集群名称,默认表达式appName
app-config: order-server,pay-server #配置Eureka中的serviceId列表,表明监控哪些服务
依次启动服务,服务之间发起访问 , 浏览器访问 springcloud-hystrix-turbine-1050 工程:http://localhost:1050/hystrix 出现如下界面:
注意:这里我们使用集群方案,所以使用cluster via Turbine后面的url,在输入框输入地址后点击“Monitor Stream” 进入如下界面:
结束