Hystrix Dashboard断路器监控,是作为断路器状态的一个组件,提供了数据监控和友好的图形化界面。通过配置Hystrix Dashboard,我们可以通过浏览页面看运行情况
上一张介绍了Hystrix,Hystrix Dashboard断路器监控,本章直接上代码,看看监控页面,基于上一篇的代码,在pom.xml中引入:
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
org.springframework.cloud
spring-cloud-starter-netflix-hystrix-dashboard
org.springframework.boot
spring-boot-starter-actuator
# 暴露监控端点
management.endpoints.web.exposure.include=*
@RestController
@EnableHystrixDashboard
@EnableHystrix
@SpringBootApplication
public class HystrixDemoApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDemoApplication.class, args);
}
// hystrix默认1秒超时,下面的随机方法可能让线程睡3秒,从而引发hystrix熔断降级,
// 观察dashboard界面,有百分比与圆点为红色则说明有熔断
@HystrixCommand(fallbackMethod = "getNameFallback" ,
threadPoolKey = "hystrixDemoThreadPool",
threadPoolProperties = {
@HystrixProperty(name = "coreSize", value = "30"),
@HystrixProperty(name = "maxQueueSize", value = "10")
})
@RequestMapping("/test")
public String test(String username){
randomlyRunLong();
return "randomlyRunLong"+username;
}
// 1/3的机率会让线程睡3秒
private void randomlyRunLong() {
Random rand = new Random();
int randomNum = rand.nextInt(3) + 1;
if (randomNum == 3) sleep();
}
//线程睡3秒
private void sleep() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 出错后会调用该降级方法,返回指定的信息
*
* @param username
* @return
*/
public String getNameFallback(String username) {
return " this username is not exist ";
}
}
好了,完成了Hystrix Dashboard 单机监控页面,在微服务环境中,Dashboard往往依赖 Turbine,它是一个聚合服务,因为我们的应用程序一般是以集群的方式部署的,一个服务有很多应用实例,我们可以把hystrix单个的流放到dashboard中查看,但是更需要看集群流量的情况,请求的错误数和成功数需要聚合在一起相加后对外显示的,那么这个时候流需要做聚合
代码已上传至码云,源码,项目使用的版本信息如下:
- SpringBoot 2.0.6.RELEASE
- SpringCloud Finchley.SR2
项目环境,只演示turbine代码,其余项目代码都有展示:
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
# 暴露监控端点
management.endpoints.web.exposure.include=*
server.port=9700
spring.application.name=hystrix-service
eureka.instance.prefer-ip-address=true
#配置eureka-server security的账户信息
eureka.client.serviceUrl.defaultZone=http://zy:zy123@localhost:10025/eureka/
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-netflix-turbine
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-netflix-hystrix-dashboard
server.port=9800
spring.application.name=turbine-service
# 暴露监控端点
management.endpoints.web.exposure.include=*
#appConfig 配置Eureka中的serviceId列表,表明监控哪些服务,多个服务id用 , 逗号隔开
turbine.appConfig=hystrix-service
turbine.aggregator.clusterConfig= default
turbine.clusterNameExpression= new String("default")
eureka.instance.prefer-ip-address=true
#配置eureka-server security的账户信息
eureka.client.serviceUrl.defaultZone=http://zy:zy123@localhost:10025/eureka/
@EnableHystrixDashboard
@EnableTurbine
@EnableDiscoveryClient
@SpringBootApplication
public class TurbineServerApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineServerApplication.class, args);
}
}
好了,Turbine的集成已经完成了,turbine 通过 eureka 把 hystrix 应用的 stream 信息聚合起来,到 dashboard 中进行显示
代码已上传至码云,源码,项目使用的版本信息如下:
- SpringBoot 2.0.6.RELEASE
- SpringCloud Finchley.SR2