Spring Cloud之Turbine聚合监控

一:简介

           在使用Hystrix Dashboard组件监控服务的熔断器状况时,每个服务都有一个Hystrix Dashboard主页,
      当服务数量很多时,监控非常不方便。为了同时监控多个服务的熔断器的状况,Netflix开源了Hystrix的
      另一个组件Turbine。Turbine用于聚合多个Hystrix Dashboard,将多个Hystrix Dashboard组件的数据放
     在一个页面上展示,进行集中监控。  

二:准备相关的服务

  1. 一个父的服务类chapter5-2,里面都是前面章节需要创建的一些Demo服务应用 
      
       pom.xml文件内容:
       
    <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>
      <groupId>com.kgf</groupId>
      <artifactId>chapter5-2</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>pom</packaging>
      <name>chapter5-2</name>
      
      <!--继承一个父模块,然后再引入相应的依赖  -->
      <parent>
      	  <groupId>org.springframework.boot</groupId>
    	  <artifactId>spring-boot-starter-parent</artifactId>
    	  <version>2.0.3.RELEASE</version>
    	  <!--relativePath是可选的,maven会首先搜索这个地址,在搜索本地远程repositories之前  -->
    	  <relativePath />
      </parent>
      
      <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>Finchley.RELEASE</spring-cloud.version>
      </properties>
      
      <!--下面的方式通过import可以实现多继承的问题  -->
      <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>
      <modules>
      	<module>eureka-server</module>
      	<module>eureka-client</module>
      	<module>eureka-ribbon-client</module>
      	<module>eureka-feign-client</module>
      	<module>eureka-turbine-client</module>
      </modules>
    </project>

     

  2. 一个eureka-server服务应用,是用来服务注册的
     
     ⑴EurekaServerApplication.java启动类
         
     ⑵application.yml配置文件信息
          
    spring:
      profiles:
        active: dev  #这里我们默认启用dev环境
     
    ---
    spring:
      profiles: dev  #环境一
    server: 
      port: 8761
    eureka:
      instance:
        hostname: peer1  #环境一服务名
      client:
        register-with-eureka: false
        fetch-registry: false
          
    ---
    spring:
      profiles: test #环境二
    server:
      port: 8762
    eureka:
      instance:
        hostname: peer2  #环境二服务名
      client:
        service-url: #将peer2注册进入peer1
          defaultZone: http://peer1:8761/eureka/

     ⑶pom.xml文件内容
         
    <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.kgf</groupId>
        <artifactId>chapter5-2</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
      <artifactId>eureka-server</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>eureka-server</name>
      
      <dependencies>
    	    <!-- 引入eureka-server依赖 --> 
    	  	<dependency>
    	  		<groupId>org.springframework.cloud</groupId>
    	  		<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    	  	</dependency>
    	  	
    	  	 <!-- 引入test测试依赖 --> 
    	  	<dependency>
    	  		<groupId>org.springframework.boot</groupId>
    	  		<artifactId>spring-boot-starter-test</artifactId>
    	  		<scope>test</scope><!--表示仅仅在测试的时候编译  -->
    	  	</dependency>
      </dependencies>
      
      <build>
      	  <plugins>
      	         <!--能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用  -->
      	  		<plugin>
      	  			<groupId>org.springframework.boot</groupId>
    	  			<artifactId>spring-boot-maven-plugin</artifactId>
      	  		</plugin>
      	  </plugins>
      </build>
    </project>

     

  3.  一个eureka-client子服务,作为微服务的客户端,也就是微服务的提供者
      
     ⑴EurekaClientApplication.java启动类
           
     ⑵bootstrap.yml配置文件,这个里面存在两个环境,我们到时候需要启动两个提供者服务 
           
     ⑶HiController.java类
           
     ⑷pom.xml文件
           
    <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.kgf</groupId>
        <artifactId>chapter5-2</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
      <artifactId>eureka-client</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>eureka-client</name>
      
       <dependencies>
    	    <!-- 引入eureka依赖 --> 
    	  	<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-web</artifactId>
    	  	</dependency>
    	  	 <!-- 引入test测试依赖 --> 
    	  	<dependency>
    	  		<groupId>org.springframework.boot</groupId>
    	  		<artifactId>spring-boot-starter-test</artifactId>
    	  		<scope>test</scope><!--表示仅仅在测试的时候编译  -->
    	  	</dependency>
       </dependencies>
       
       <build>
      	  <plugins>
      	         <!--能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用  -->
      	  		<plugin>
      	  			<groupId>org.springframework.boot</groupId>
    	  			<artifactId>spring-boot-maven-plugin</artifactId>
      	  		</plugin>
      	  </plugins>
      </build>
    </project>

     

  4.  一个eureka-feign-client子服务,用来负载均衡调用提供者
      
     ⑴application.yml配置文件
          
     ⑵EurekaFeignClientApplication.java启动类
          
     ⑶创建EurekaClientFeign.java接口类,用来对接eureka-client服务应用中的对外暴露的接口
          
     ⑷ 创建EurekaClientFeignService.java类
           
     ⑸创建EurekaClientFeignController.java类
          
     ⑹HiHystrixFallBack.java类
          
     ⑺ pom.xml文件
          
    <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.kgf</groupId>
        <artifactId>chapter5-2</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
      <artifactId>eureka-feign-client</artifactId>
      <name>eureka-feign-client</name>
      
      <dependencies>
             <!--引入feign依赖,这个feign的起步依赖已经引入了Hystrix的依赖  -->
             <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
             <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-web</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-netflix-hystrix-dashboard</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-hystrix</artifactId>
      	 	</dependency>
      </dependencies>
    </project>
      
  5. 一个eureka-ribbon-client子服务,用来负载均衡调用上面的eureka-client服务的hi接口
      
      ⑴启动类EurekaRibbonClientApplication.java
          
      ⑵RibbonConfig.java用来注入RestTemplate的bean对象的类
           
      ⑶RibbonService.java调用eureka-client对外开发接口的类
           
      ⑷RibbonController.java类
           
      ⑸application.yml配置文件
           
      ⑹pom.xml文件
           
    <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.kgf</groupId>
        <artifactId>chapter5-2</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
      <artifactId>eureka-ribbon-client</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>eureka-ribbon-client</name>
      <dependencies>
      	 	<dependency>
      	 	   <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
      	 	</dependency>
      	 	<dependency>
      	 	   <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
      	 	</dependency>
      	 	<dependency>
      	 	   <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-web</artifactId>
      	 	</dependency>
      	 	<dependency>
      	 	   <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
      	 	</dependency>
      	 	<!--hystrix-dashboard是用来监控Hystrix熔断器状况的一个组件  -->
      	 	<dependency>
      	 	   <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
      	 	</dependency>
      	 	<!-- spring boot提供了一系列的监控指标,可以通过actuator进行引入  -->
      	 	<dependency>
    		    <groupId>org.springframework.boot</groupId>
    		    <artifactId>spring-boot-starter-actuator</artifactId>
    		</dependency>
      </dependencies>
    </project>

     

  6. 创建聚合监控的子服务eureka-turbine-client
      
      ⑴创建启动类TurbineClientApplication.java
           
      ⑵application.yml配置文件
           
           turbine.aggregator.app-config:这个是用来配置需要监控哪些服务的
           
      ⑶pom.xml配置文件
           
    <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.kgf</groupId>
        <artifactId>chapter5-2</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
      <artifactId>eureka-turbine-client</artifactId>
      <name>eureka-turbine-client</name>
     <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-web</artifactId>
    		</dependency>
    		 <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
             <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency> 
            <dependency>
    		    <groupId>org.springframework.cloud</groupId>
    		    <artifactId>spring-cloud-netflix-turbine</artifactId>
    		</dependency>
      </dependencies>
    </project>

       

三:测试

  1. 首先启动eureka-server,eureka-client,eureka-ribbon-client,eureka-feign-client ,eureka-turbine-client 这些服务
  2. 在浏览器上访问http://peer1:8764/hystrix,这个界面为Hystrix Dashboard界面,在界面的监控流的Url地址输入
     http://localhost:8769/turbine.stream,单击monitor
        
    可以发现这个页面聚合了eureka-ribbon-client和eureka-feign-client的Hystrix Dashboard数据。      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值