转载

Spring Cloud Turbine

本文中,我将向你介绍 Spring Cloud Netflix Turbine 。它将多个Hystrix Metrics Streams 聚合为一个,以便显示在一个仪表板视图中。 简要介绍 Hystrix 。 在微服务架构中,我们有许多小应用程序相互通信以完成请求。这些下游服务有可能无法正确响应或完全失败。为了防止发生级联故障,我们为微服务设置了 Hystrix 回退机制。

每个实现 Hystrix 的微服务都可以选择公开 Hystrix Metrics Streams (通过 actuator 端点 /hystrix.stream ),以便通过 Hystrix Dashboard 查看。

如果您想了解更多信息,我已在 Spring Cloud:Hystrix 中详细介绍了这一点。

Turbine 是 Netflix 的一个开源工具,用于将多个流聚合到一个流中。 Spring 提供了一个很好的包装器,以方便在 Spring 生态系统中使用。

2.搭建

类似于 Spring Cloud:Hystrix 的设置,后端服务如下所示:

/recommendations
/personalized/{id}
Hystrix dashboard

以下是我们在Eureka服务器上看到的服务列表:

Spring Cloud Turbine

user-servicerecommendation-service 都实现了 Hystrix 回退机制,并通过Actuator暴露了 /hystrix.stream 端点:

  • 用户服务的 Hystrix 端点: http://localhost:8060/actuator/hystrix.stream
  • 用于推荐服务的 Hystrix 端点: http://localhost:8070/actuator/hystrix.stream

我们可以在 Hystrix dashboard 中单独查看这些,方法是在框中键入URL并单击 Monitor Stream 即可:

Spring Cloud Turbine

你将看到如下指标(metric):

Spring Cloud Turbine
注意:如果没有看到任何流(stream),那么可能必须点击该stream的服务端点。 例如:对于 user-service ,我们可以点击 http://localhost:8060/personalized/1

来生成流。

3.安装Turbine

你可能已经意识到,查看单个流(stream)的效率不高,尤其是有许多微服务时。

Turbine 可以将所有单独的 hystrix.stream 聚合成一个 turbine.stream ,以便在 Hystrix Dashboard 上查看。

它使用 DiscoveryClient 接口找出生产 /hystrix.stream 的相关服务。

要将 Turbine 添加到 Hystrix dashboard ,请添加以下依赖项:

<dependency>  
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>  
复制代码

注意:这是 Turbinestarter 依赖,默认情况下使用 Spring Cloud Eureka 作为服务发现。 如果使用的是 Spring Cloud Consul ,请使用以下依赖项:

<dependency>  
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>  
<dependency>  
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>  
复制代码

在本文中,我们将使用starter依赖,即 spring-cloud-starter-netflix-turbine

要启用 Turbine ,只需使用 @EnableTurbine 注解主类:

@SpringBootApplication
@EnableTurbine
@EnableDiscoveryClient
@EnableHystrixDashboard
public class HystrixTurbineApplication {

    public static void main(String[] args) {
        SpringApplication.run(HystrixTurbineApplication.class, args);
    }
}
复制代码

为了使 Turbine 按预期工作,我们必须在 application.properties 中添加一些细节:

server.port= 9090  
spring.application.name= hystirx-turbine  
eureka.client.serviceUrl.defaultZone= http://localhost:8761/eureka/  
turbine.appConfig= user-service,recommendation-service  
turbine.clusterNameExpression= new String("default")  
复制代码

在这里,我们告诉 Turbine Eureka 服务器的位置,以及它需要获取 / hystrix.stream 的应用程序。并将 turbine.clusterNameExpression 设为 new String("default") ,即默认集群名称为“default”。

我们可以打开 http://localhost:9090/turbine.stream?cluster=default 来查看 user-servicerecommendation-service 的聚合流:

Spring Cloud Turbine

同样,如果没有查看到任何内容,只需点击 user-servicerecommendation-service 端点即可生成流。

我们还可以在 Hystrix dashboard 上使用此URL来生成一个很好的聚合视图:

Spring Cloud Turbine

有时,您可能希望将 EurekaserviceId 用作 dashboard 的集群名称。这可以通过设置 turbine.aggregator.clusterConfig 来完成:

server.port = 9090
spring.application.name = hystirx-turbine
eureka.client.serviceUrl.defaultZone = http:// localhost:8761 / eureka /
turbine.aggregator.clusterConfig = USER-SERVICE,RECOMMENDATION-SERVICE
turbine.appConfig =用户服务,推荐服务
复制代码

您还可以通过点击 /clusters 端点来检查 Turbine 应用程序中当前已配置的集群。

可以通过将 turbine.endpoints.clusters.enabled 设置为 false 来禁用此端点。

Spring Cloud Turbine
所以,现在我们可以将 turbine.stream 视为 Eureka ID ,例如: http://localhost:9090/turbine.stream?cluster=USER-SERVICE
Spring Cloud Turbine
如果特定服务的多个实例正在运行, Turbine

将按照集群进行分拣并将其显示在结果中。

4.总结

在本文中,我们已经介绍了如何在 Hystrix stream 的基础上设置 Turbine 以获得聚合视图。我们首先看到了 Turbine 从所有服务中获取 Hystrix stream 的经典方法。

与往常一样,本文中使用的示例代码可以在 GitHub 上找到。

原文链接: stackabuse.com/spring-clou…

作者:Dhananjay Singh

译者: Leesen

Spring Cloud Turbine
原文  https://juejin.im/post/5cfa664b51882576be2761fa
正文到此结束
Loading...