1. 程式人生 > >Spring Cloud入門教程-使用Hystrix Dashboard 監控熔斷器的狀態

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。

聚合完成。