Spring Cloud入門教程-使用Hystrix Dashboard 監控熔斷器的狀態
在微服務架構中,為了保證服務例項的可用性,防止服務例項出現故障導致執行緒阻塞,而出現了熔斷器模型。熔斷器的狀況反映了一個程式的可用性和健壯性,它是一個重要指標Hystrix Dashboard是監控 Hystriⅸx的熔斷器狀況的一個元件,提供了資料監控和友好的圖形化展示介面。本節在上一節的基礎上,以案例的形式講述如何使用 Hystrix Dashboard監控熔斷器的狀態。
在restTemplate 中使用Hystrix Dashboard
修改eureka-client-ribbon 專案,新增依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>
在啟動類EurekaClientRibbonApplication上添加註解@EnableHystrixDashboard。
@EnableHystrixDashboard @EnableHystrix @EnableEurekaClient @SpringBootApplication @ComponentScan("com.springcloud.demo.eurekaclientribbon") public class EurekaClientRibbonApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientRibbonApplication.class, args); } }
還需要新增ServletRegistrationBean ,這是新版本做的修改,這裡在RibbonConfig中新增。
@Bean public ServletRegistrationBean getServlet() { HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet(); ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet); registrationBean.setLoadOnStartup(1); registrationBean.addUrlMappings("/actuator/hystrix.stream"); registrationBean.setName("HystrixMetricsStreamServlet"); return registrationBean; }
啟動eureka-server,eureka-client,eureka-client-riibon,瀏覽器請求http://localhost:8795/hystrix
介面如上圖。多次點選後灰色的小圓圈會變大,直線會上揚,具體效果自己驗證。
在feign中的配置與ribbon 相同,這裡不再贅述。
使用Turbine 中聚合監控
在使用 Hystrix Dashboard元件監控服務的熔斷器狀況時,每個服務都有Dashboard主頁,當服務數量很多時,監控非常不方便。為了同時監控多個服務的熔斷器的狀Turbine用於聚合多個 Hystrix Dashboard, Netflix開源了 Hystrix的另一個元件 Turbine 將多個 Hystrix Dashboard元件的資料放在一個頁面上展示,進行集中監控。
建立新的Module eureka-monitor-client
pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.springcloud.demo</groupId>
<artifactId>springcloud-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>eureka-monitor-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka-monitor-client</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
增加配置埠為8796:
server.port=8796
spring.application.name=service-turbine
eureka.client.service-url.defaultZone=http://localhost:8791/eureka/
turbine.aggregator.cluster-config=default
turbine.app-config=eureka-client-feign,eureka-client-ribbon
turbine.cluster-name-expression=new String("default")
在EurekaMonitorClientApplication 上添加註解@EnableTurbine
@EnableTurbine
@SpringBootApplication
public class EurekaMonitorClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaMonitorClientApplication.class, args);
}
}
啟動eureka-server,eureka-client,eureka-client-riibon,eureka-client-feign,eureka-monitor-client。
聚合完成。