[Spring Cloud] 4.4 Circuit Breaker:Hystrix Dashboard

4.4 Circuit Breaker: Hystrix Dashboard

断路器:Hystrix仪表板

Hystrix中一个主要的特性,就是对每一条HystrixCommand操做的各个方面均可以度量检测。 Hystrix经过一个仪表板页面来有效的显示每个断路器的健康状态。java

image

Figure 3. Hystrix Dashboardgit

4.4.1 How to Include Hystrix Dashboard 如何引入Hystrix仪表板

引入Hystrix须要在工程中引入相关starter: group:org.springframework.cloud artifact id :spring-cloud-starter-hystrix-dashboard。如何构建Cloud工程能够参见:Spring Cloud Project pagegithub

能够经过@EnableHystrixDashboard注解来开启仪表板。而后,就能够经过/hystrix访问仪表板页面;并且仪表板相关数据,也会经过/hystrix.stream接口提供给客户端应用。web

4.4.2 Turbine

其实对于一个实例个体来讲,Hystrix的数据对于系统总体健康程度来讲并不十分重要。 Turbine提供了一个仪表板页面来聚合全部/hystrix.stream相关数据,同时把全部数据合成到一个/turbine.stream接口中。spring

在Eureka中,运行Turbine很是简单,只须要在主类中加上一个@EnableTurbine注解。(固然,前提是已经引入spring-cloud-starter-turbineapp

Turbine完整配置属性请参见 WIKI。 有一点不一样的是,turbine.instanceUrlSuffix不在须要添加端口配置(端口会自动处理)。若是须要手动配置,须要设置turbine.instanceInsertPort=false分布式

注意: 默认状况下,Turbine会自动在Eureka集群中查找全部实例的homePageUrl来发现它们的/hystrix.stream接口。这就意味着若是spring-boot-actuator运行在同一个端口(默认就是如此),那么,调用/hystrix.stream就会失败。为了能让Turbine找到正确的端口,须要在实例的元数据中指定management.port端口。spring-boot

eureka:
  instance:
    metadata-map:
      management.port: ${management.port:8081}

turbine.appConfig配置成Eureka的serviceIds集合,Turbine就会使用这个属性来发现实例。 Turbine会在Hystrix仪表板页面使用一个连接:http://my.turbine.sever:8080/turbine.stream?cluster=<CLUSTERNAME>,若是集群名字是default,那能够省略参数cluster。参数cluster必须对应着turbine.aggregator.clusterConfig配置的一个实体。参数cluster值为大写字符,所以配置的时候须要注意。ui

turbine:
  aggregator:
    clusterConfig: CUSTOMERS
  appConfig: customers

能够在根实例的InstanceInfo中设置turbine.clusterNameExpression,这样clusterName可使用SPEL表达式来配置。 默认值是appName,意味着Eureka的serviceId是以集群key做为命名的。(例如:customers的InstanceInfo有一个CUSTOMERSappNamecode

下面这个例子turbine.clusterNameExpression=aSGName,展现了另外一种状况。使用AWS的ASG做为集群名。

turbine:
  aggregator:
    clusterConfig: SYSTEM,USER
  appConfig: customers,stores,ui,admin
  clusterNameExpression: metadata['cluster']

在这种状况下,4个服务会从元数据中拉去集群名。预期中的值就会包括:SYSTEMUSER

若是须要使用"default"做为全部应用的集群名,须要一个字符串直译表达式(在YAML中是双引号加上一层单引号):

turbine:
  appConfig: customers,stores
  clusterNameExpression: "'default'"

Spring Cloud提供了一个spring-cloud-starter-turbine,其中包含了Turbine服务端运行时的全部依赖。而后,只须要在Spring Boot应用中加上@EnableTurbine就行。

注意: 默认状况下,Spring Cloud 容许Turbine使用地址 + 端口来逐个处理主机、集群的。 若是想要在Turbine中使用Netflix的策略(不容许处理多主机多集群)(实例ID就是主机名),那能够设置:turbine.combineHostPort=false

4.4.3 Turbine Stream 实时处理

标准Turbine的策略,是从各个分布式节点中拉取Hystrix命令来获得相关数据。可是在某些场景中(好比:PaaS),这个策略就不行了。

若是想让Hystrix命令执行时主动推送数据到Turbine,而且让Spring Cloud可以处理这些消息。那能够在客户端增长一个spring-cloud-netflix-hystrix-stream依赖,并在提供的诸多spring-cloud-starter-stream-*中,选择一个。

在服务端,只须要在Spring Boot 中经过注解@EnableTurbineStream来开启就行,默认状况下会启用8989端口。若是须要的话,能够经过server.port或者turbine.stream.port来指定端口。

若是已经使用了spring-boot-starter-webspring-boot-starter-actuator,那能够经过management.port来指定端口。

能够设置Hystrix仪表板使用Turbine Stream Server来替代Hystrix Stream。 假设Turbine Stream运行在主机名:myhost 的8989端口,那么能够经过http://myhost:8989做为Hystrix仪表板的数据来源。链路中个节点将使用<serviceId>.<name>做为节点名。

Spring Cloud 提供了一个spring-cloud-starter-turbine-stream,其包括了Turbine Stream服务运行时全部的依赖。使用时,只须要选择一个Stream实现便可。例如:spring-cloud-starter-stream-rabbit(这东东是基于最新Netty实现的,因此须要java 8)

相关文章
相关标签/搜索