美文网首页
Spring Cloud Hystrix Dashboard断路

Spring Cloud Hystrix Dashboard断路

作者: yunqing_71 | 来源:发表于2019-11-02 21:03 被阅读0次

    \color{red}{更多精彩文章请关注本人公众号}
    \color{red}{更多精彩文章请关注本人公众号}
    \color{red}{更多精彩文章请关注本人公众号}

    yunqing.jpg
    Spring Cloud基于Spring Boot的监控actuator规范提供了Hystrix的指标监控仪表板。首先我们创建一个新的模块hystrix-dashboard

    加入以下依赖

    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <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-hystrix-dashboard</artifactId>
    </dependency>
    

    创建application.yml添加以下配置

    server:
      port: 8501 #配置端口号
    spring:
      application:
        name: hystrix-dashboard #配置服务名称
    eureka:
      client:
        register-with-eureka: true
        fetch-registry: true
        service-url:
          defaultZone: http://localhost:8001/eureka/ #注册到中心的地址
    

    在入口类添加注解,开启监控功能

    /**
     * @EnableHystrixDashboard 启动监控功能
     */
    @EnableHystrixDashboard
    @EnableDiscoveryClient
    @SpringBootApplication
    public class HystrixDashboardApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(HystrixDashboardApplication.class, args);
        }
    
    
    }
    

    Spring Cloud提供的Hystrix监控信息的endpoint ID是hystrix.stream,为了看到对应的监控信息,还需要把Hystrix对应的endpoint以http的方式发布出来。注意:给hystrix-service这个需要被监控的模块添加以下依赖:

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

    给hystrix-service模块的application.yml添加如下配置:

    server:
      port: 8401 #端口号
    spring:
      application:
        name: hystrix-service #服务名称
    
    eureka:
      client:
        register-with-eureka: true
        fetch-registry: true
        service-url:
          defaultZone: http://localhost:8001/eureka/ #注册中心地址
    
    #这是我声明的一个值,在springboot中通过@Value注解可调用
    service-url:
      emp-service: http://emp-service # emp-service的调用路径,cloud的模块之间的调用要用服务名称
    
    #Spring Cloud提供的Hystrix监控信息的endpoint ID是hystrix.stream,
    #为了看到对应的监控信息,还需要把Hystrix对应的endpoint以http的方式发布出来。
    management:
      endpoints:
        web:
          exposure:
            include: hystrix.stream
    

    也可以直接指定发布所有的endpoint。即改成如下,但是不建议这么做!!!

    management:
      endpoints:
        web:
          exposure:
            include: *
    

    启动本模块和注册中心模块,之后可以通过/hystrix访问到监控界面的首页,即访问 localhost:8501/hystrix 后你会看到如下界面。


    image

    这时候再启动emp-service模块、hystrix-service模块共以下四个模块

    image

    这时候可以访问以下注册中心 localhost:8001可以看到三个服务都被注册进来了

    image

    重点来了:

    在上面的页面中文本框中添加http://localhost:8401/actuator/hystrix.stream

    image

    跳转后访问localhost:8401/emp/11多刷新几次请求,可以看到如下页面中监控到了11次请求,还可以看到各@HystrixCommand对应的断路器的状态,各请求的耗时情况,失败率,以及对应的线程池的状态等。

    image

    turbine

    hystrix.stream只能看到单个应用的监控信息。通常同一个服务会部署多份,使用hystrix.stream查看每个单个应用的情况会比较麻烦,也不利于分析。Netflix提供了一个可以聚合多个应用的监控信息的工具,叫turbine。使用turbine时,一般会独立一个工程,所以创建新的模块turbine-service

    加入以下依赖:

    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <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-turbine</artifactId>
    </dependency>
    

    创建application.yml加入如下配置:

    server:
      port: 8601 #指定端口号
    spring:
      application:
        name: turbine-service #指定服务名称
    eureka:
      client:
        register-with-eureka: true
        fetch-registry: true
        service-url:
          defaultZone: http://localhost:8001/eureka/ #注册到注册中心的地址
    turbine:
      app-config: hystrix-service #指定需要收集信息的服务名称
      cluster-name-expression: new String('default') #指定服务所属集群
      combine-host-port: true #以主机名和端口号来区分服务
    

    在入口类加上以下注解,开启turbine集群监控功能

    
    /**
     * @EnableTurbine 启用Turbine集群监控功能
     */
    @EnableTurbine
    @EnableDiscoveryClient
    @SpringBootApplication
    public class TurbineServiceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(TurbineServiceApplication.class, args);
        }
    
    }
    

    因为要测试的是集群监控,又因为目前只有一个用到断路器的模块,我就不新建模块了,直接复制一个hystrix-service模块的application.yml命名为application-slave.yml该其中的端口号为8402

    image image

    复制出一个hystrix-service的服务模块启动在8402窗口上,然后启动如下几个服务:注册中心、emp-service、hystrix-service(8401和8402)、hystrix-dashboard、turbine-service


    image

    然后访问仪表盘模块 localhost:8501/hystrix 文本框中填写如下localhost:8601/turbine.stream

    image

    然后访问localhost:8401/emp/11和localhost:8402/emp/11多刷新几次看到如下结果:

    image

    项目源码见 https://github.com/kangqing/cloud

    相关文章

      网友评论

          本文标题:Spring Cloud Hystrix Dashboard断路

          本文链接:https://www.haomeiwen.com/subject/zumhbctx.html