Skip to main content

服务容错 Spring Cloud Hystrix [3]

技术hystrixAbout 3 min

使用Hystrix仪表盘我们可以通过图形界面的形式,看到我们的应用运行状态

Hystrix仪表盘

Spring Cloud 整合了Hystrix Dashboard. 主要用来实时监控Hystrix的各项指标信息. 通过Hystrix Dashboard反馈的实时信息. 我们可以发现系统中存在的问题, 从而及时采取对应措施.

1 步骤

1.1 创建SpringBoot工程

1.2 配置pom

主要添加Hystrix Hystrix-Dashboard actuator

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

1.3 为应用主类添加@EnableHystrixDashboard. 启用HystrixDashboard功能.

1.4 配置yml 或者 properties

要使用一个未被占用的端口

1.5 访问验证

http://ipopen in new window:port/hystrix
从页面上我们可以看到,HystrixDashboard支持三种不同的监控方式:

  • 默认的集群监控
  • 指定的集群监控
  • 单体应用的监控
    Hystrix Dashboard监控单实例节点需要通过访问实例的/hystrix.stream接口来实现, 我们自然要为服务实例添加这个端点.
  • 在服务实例pom.xml中增加actuator监控模块以开启监控相关的端点. 并引入断路器的依赖spring-cloud-starter-hystrix
    <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>
  • 服务实例主类使用@EnableCircuitBreaker注解, 开启断路器功能.

  • 监控界面
    实心圆:
    颜色: 绿黄橙红.健康度依次递减
    大小: 表示请求流量, 流量越大实心圆越大

以上只是对某一个应用进行监控,当监控多个应用时需要使用turbine进行集群监控

2 Turbine集群监控

Hystrix Dashboard中的/turbine.stream是对集群使用的. 使用方法如下:

  1. 步骤同上,首先创建一个springboot工程, pom中引入turbine和actuator
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-boot-starter-turbine</artifactId>
</dependency>
  1. 之后,在应用主类中应用@EnableTurbine注解开启Turbine
  2. 最后配置properties
spring:
  application:
    name: turbine
server:
  port: 9002
manage:
  port: 9102
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1111/eureka
turbine:
  #该属性指定需要收集监控信息的服务名
  app-config: bookservice
  #指定集群名称, 当服务增加时可以使用集群来划分不同的应用集合
  cluster-name-expression: 'NikolaZhang'
  #true表示同一主机的服务通过主机名和端口名的组合进行区分, 默认情况使用主机名进行区分, 但这会将主机上的多个服务聚合成一个服务.
  combine-host-port: true
  1. 在浏览器中输入http://localhost:9000/turbine.streamopen in new window

3 与消息代理结合

Spring Cloud在封装Turbine的时候, 还封装了基于消息代理的收集实现. 我们可以将所有需要收集的监控信息输出到消息代理中, 然后turbine服务再从消息代理中异步获取这些监控信息. 最后将这些监控信息聚合并输出到Hystrix Dashboard中.
实现步骤如下:

  1. 首先创建springboot工程, 引入turbine-amqp和actuator
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-boot-starter-turbine-amqp</artifactId>
</dependency>

  1. 应用主类要使用@EnableTurbineStream注解
  2. 配置properties
spring:
  application:
    name: turbine
server:
  port: 9002
manage:
  port: 9102
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1111/eureka
  1. 最后,对服务进行配置, 使监控信息能够输出到RabbitMQ
    只需要向pom中添加如下pom
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-boot-starter-netflix-hystrix-amqp</artifactId>
</dependency>
  1. 验证输入http://localhost:9000/turbine.streamopen in new window. 效果同上, 但是这里的监控信息是通过消息代理异步获取之后输出到Hystrix Dashboard中的.

end

到此为止,服务容错已经介绍完毕,这周末我会把之前的程序测试一下,然后再水一篇博客。

What do you think?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v3.0.0-alpha.10