微服务搭建集成Spring Cloud Turbine详解

 更新时间:2019年06月10日 09:59:36   投稿:newname  
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。下面我们来详细了解一下吧

1.概述

本文中,我将向你介绍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的设置,后端服务如下所示:

  • Eureka Server :作为服务注册运行并在端口8761上运行。
  • 推荐服务:一个简单的REST服务,只有一个端点:/recommendations,并在端口8070上运行。
  • 用户服务:一个简单的REST服务,单个端点为:/personalized/{id},并在端口8060上运行。
  • Hystrix Turbine :Hystrix dashboard服务,用于显示Hystrix流,并在端口'9090'上运行。

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

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

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

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

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

注意:如果没有看到任何流(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> 

注意:这是Turbine的starter依赖,默认情况下使用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-service和recommendation-service的聚合流:

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

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

有时,您可能希望将Eureka的serviceId用作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来禁用此端点。

所以,现在我们可以将turbine.stream视为Eureka ID,例如:http://localhost:9090/turbine.stream?cluster=USER-SERVICE

如果特定服务的多个实例正在运行,Turbine将按照集群进行分拣并将其显示在结果中。

4.总结

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java HashSet(散列集),HashMap(散列映射)的简单介绍

    Java HashSet(散列集),HashMap(散列映射)的简单介绍

    这篇文章主要介绍了Java HashSet(散列集),HashMap(散列映射)的简单介绍,帮助大家更好的理解和学习Java集合框架的相关知识,感兴趣的朋友可以了解下
    2021-01-01
  • Spring中的BeanFactory对象实例化工厂详解

    Spring中的BeanFactory对象实例化工厂详解

    这篇文章主要介绍了Spring中的BeanFactory对象实例化工厂详解,BeanFactory及其子类是Spring IOC容器中最重要的一个类,BeanFactory由类名可以看出其是一个Bean工厂类,其实它确实是一个Bean工厂类,完成Bean的初始化操作,需要的朋友可以参考下
    2023-12-12
  • Eclipse配置SVN的几种方法及使用详情

    Eclipse配置SVN的几种方法及使用详情

    这篇文章主要介绍了Eclipse配置SVN的几种方法及使用详情,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Spring Boot中使用Spring-data-jpa的配置方法详解

    Spring Boot中使用Spring-data-jpa的配置方法详解

    今天小编就为大家分享一篇关于Spring Boot中使用Spring-data-jpa的配置方法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • MyBatisPlus利用Service实现获取数据列表

    MyBatisPlus利用Service实现获取数据列表

    这篇文章主要为大家详细介绍了怎样使用 IServer 提供的 list 方法查询多条数据,这些方法将根据查询条件获取多条数据,感兴趣的可以了解一下
    2022-06-06
  • SpringCloud通用请求字段拦截处理方法

    SpringCloud通用请求字段拦截处理方法

    这篇文章主要介绍了SpringCloud通用请求字段拦截处理,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • java eclipse 整个项目或包查找只定字符串并替换操作

    java eclipse 整个项目或包查找只定字符串并替换操作

    这篇文章主要介绍了java eclipse 整个项目或包查找只定字符串并替换操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java List的remove()方法踩坑

    Java List的remove()方法踩坑

    Java的List在删除元素时,一般会用list.remove(o)/remove(i)方法。在使用时,容易触碰陷阱,本文就来介绍一下容易踩的坑,感兴趣的可以了解一下
    2021-10-10
  • Array Index Out of Bounds:数组越界错误解决方案及调试技巧

    Array Index Out of Bounds:数组越界错误解决方案及调试技巧

    数组越界访问是指访问数组中超出其有效索引范围的元素,这是一种常见的编程错误,可能导致程序崩溃或数据损坏,下面这篇文章主要给大家介绍了关于Array Index Out of Bounds:数组越界错误解决方案及调试技巧的相关资料,需要的朋友可以参考下
    2024-08-08
  • Java分布式服务框架Dubbo介绍

    Java分布式服务框架Dubbo介绍

    这篇文章介绍了Java分布式服务框架Dubbo,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论