【springCloud基础篇-8】SpringCloud的熔断汇总统计之Hystrix-Turbine(接上篇)的基础使用

环境:基于上篇文章的基础。

知道了什么是熔断,也看到了熔断的监控以后。

在复杂的分布式系统中,相同服务的节点经常需要部署上百甚至上千个,很多时候,运维人员希望能够把相同服务的节点状态以一个整体集群的形式展现出来,这样可以更好的把握整个系统的状态。 为此,Netflix提供了一个开源项目(Turbine)来提供把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示。

 

1、创建所需要熔断监控和汇总的项目

我们这里创建两个,为了方便我直接用比较简单的方式。

找到consumer项目所在的硬盘目录,我的是F盘。

直接负责consumer项目到F盘根目录,修改文件夹名称为:consumerNode01

再次复制consumer,修改文件夹名称为:consumerNode02

使用IDEA分别打开01、02项目,

修改01项目的pom文件:

【springCloud基础篇-8】SpringCloud的熔断汇总统计之Hystrix-Turbine(接上篇)的基础使用

修改这两个节点分别为consumerNode01。

修改01的yml配置文件:

eureka:
  client:
    service-url:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/,http://peer3:8002/eureka/
spring:
  application:
    name: consumer-node01
server:
  port: 9011
feign:
  hystrix:
    enabled: true

 

修改02时同上,端口号为9012

此时需要监控的项目已创建好,启动注册中心,启动producer服务提供者项目。

检查注册中心是否正常注册。

2、创建监控统计汇总项目

先创建一个springboot项目,名称为:hystrix-turbine

修改POM文件如下:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>hystrix-turbine</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>hystrix-turbine</name>
    <description>Demo project for Spring Boot</description>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-turbine</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-netflix-turbine</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-hystrix-dashboard</artifactId>
        </dependency>

    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

其中有一部分是熔断监控统计所必须的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-turbine</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-hystrix-dashboard</artifactId>
</dependency>

然后修改yml配置文件:

eureka:
  client:
    service-url:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/,http://peer3:8002/eureka/
spring:
  application:
    name: hystrix-dashboard-turbine
server:
  port: 8003
turbine:
  appConfig: consumer-node01,consumer-node02
  clusterNameExpression: new String("default")
  aggregator:
    clusterConfig: default
  • turbine.appConfig :配置Eureka中的serviceId列表,表明监控哪些服务
  • turbine.aggregator.clusterConfig :指定聚合哪些集群,多个使用”,”分割,默认为default。可使用http://.../turbine.stream?cluster={clusterConfig之一}访问
  • turbine.clusterNameExpression : 1. clusterNameExpression指定集群名称,默认表达式appName;此时:turbine.aggregator.clusterConfig需要配置想要监控的应用名称;2. 当clusterNameExpression: default时,turbine.aggregator.clusterConfig可以不写,因为默认就是default;3. 当clusterNameExpression: metadata[‘cluster’]时,假设想要监控的应用配置了eureka.instance.metadata-map.cluster: ABC,则需要配置,同时turbine.aggregator.clusterConfig: ABC

启动类中修改:

@SpringBootApplication
@EnableHystrixDashboard
@EnableTurbine
public class HystrixTurbineApplication {

    public static void main(String[] args) {
        SpringApplication.run(HystrixTurbineApplication.class, args);
    }

}

OK

3、测试

保证注册中心、服务提供者、01、02项目正常启动和注册后,启动hystrix-turbine熔断统计监控项目。

检查注册中心是否正常注册hystrix-turbine项目。

访问http://localhost:8003/turbine.stream 如图:

【springCloud基础篇-8】SpringCloud的熔断汇总统计之Hystrix-Turbine(接上篇)的基础使用

 

然后浏览器中输入http://localhost:8003/hystrix

在小熊界面中输入:http://localhost:8001/turbine.stream点击Monitor Stream,进入监控界面。

然后多次访问:http://localhost:9012/hello/neo 或者http://localhost:9011/hello/neo

观察如下图:

【springCloud基础篇-8】SpringCloud的熔断汇总统计之Hystrix-Turbine(接上篇)的基础使用