15.4 聚合多个Hystrix流
15.4 聚合多个Hystrix流
Hystrix dashboard一次只能监控一个流。因为每个微服务实例都发布它们自己的Hystrix,所以几乎不可能对整个应用的健康状况历史有一个整体的了解。
幸运的是,Netflix的另一个项目Turbine提供了将所有微服务的所有Hystrix流聚合到一个Hystrix流中的办法,这样Hystrix dashboard就能对其进行监控了。SpringCloud Netflix支持以类似于创建其他Spring Cloud服务的方式创建Turbine服务。要创建Turbine服务,我们需要创建一个新的Spring Boot项目并将Turbine starter依赖添加到构建文件中:
1 | <dependency> |
在创建完新项目之后,我们需要启用Turbine。为了实现这一点,我们需要在应用的主配置类上添加@EnableTurbine
注解:
1 |
|
在开发阶段,我们会和Taco Cloud应用的其他服务一起在本地运行Turbine。为了避免端口冲突,我们需要为Turbine选择一个唯一的端口,这样就不会与其他的服务产生冲突了。你可以选择任意的端口,不过我倾向于选择8989:
1 | server: |
Turbine会消费多个微服务的流并将它们的断路器指标合并到一个流中。它会作为Eureka的客户端,发现那些需要聚合到自己的流的服务。但是,Turbine并不想聚合Eureka中注册的所有流,所以我们必须配置Turbine,告诉它都要使用哪些服务。
turbine.app-config属性会接受一个由逗号分隔的服务名称列表,Turbine会在Eureka中查找它们并聚合它们的Hystrix流。对Taco Cloud应用来讲,我们需要注册在Eureka中的4个服务,即ingredient-service、taco-service、order-service和user-service。如下的application.yml配置条目展现了如何设置turbine.app-config:
1 | turbine: |
注意,除了turbine.app-config之外,我们还将turbine.cluster-name-expression属性设置成了“’default’”。这表明Turbine会收集名为default的集群中的所有聚合流。设置这个属性是非常重要的,否则Turbine中不会包含任何特定应用的聚合流数据。
现在,启动Turbine服务器并让Hystrix dashboard访问http://localhost:8989/turbine.stream地址上的流,特定应用的所有断路器都将会展现在断路器dashboard上,如图15.6所示。
Hystrix dashboard能够展现所有服务的所有断路器要归功于Turbine。这样,我们就能够一站式地监控Taco Cloud应用所有断路器的健康状况了。