微服务搭建集成Spring Cloud Turbine详解
作者:newname 发布时间:2023-03-29 12:39:07
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上找到。
来源:https://juejin.im/post/5cfa664b51882576be2761fa
猜你喜欢
- java使用stream实现list中对象属性的合并:根据两个List中的某个相同字段合并成一条List,包含两个List中的字段一、前言为
- 最近做的项目,需要将一些信息导出到word中。在网上找了好多解决方案,现在将这几天的总结分享一下。目前来看,java导出word大致有6种解
- 一、同步问题提出线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。例如:两个线程ThreadA、ThreadB都操作同一个对
- 线程可以划分优先级,优先级高的线程得到的CPU资源比较多,也就是CPU优先执行优先级高的线程对象中的任务。设置线程优先级有助于帮助线程规划器
- SpringBoot线程池和Java线程池的用法和实现原理使用默认的线程池方式一:通过@Async注解调用public class Asyn
- 本文实例为大家分享了android自定义环形对比图的具体代码,供大家参考,具体内容如下1.首先在res/values里创建一个attr.xm
- 方式1:1. 明确 Spark中Job 与 Streaming中 Job 的区别1.1 Spark Core一个 RDD DAG Graph
- 一、问题描述今天使用SDK Manager将Android SDK的版本更新到了Android 5.1的版本,eclipse创建androi
- 综述在Android系统中,出于对性能优化的考虑,对于Android的UI操作并不是线程安全的。也就是说若是有多个线程来操作UI组件,就会有
- 在Java中从字符串中删除空格有很多不同的方法,如trim,replaceAll等。但是,在JDK 11添加了一些新的功能,如strip、s
- 1、深度总结引用一位网友的话,说的非常好,如果别人问你static的作用;如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的;如果
- static :静态常量,静态方法,静态代码块静态变量: 静态变量属于类的,使用类名来访问,非静态变量是属于对象的,"必须&quo
- 最近要给一个 Winform 项目添加功能,需要一个能显示进度条的弹窗,还要求能够中止任务,所以就做了一个,在此做个记录总结。虽然用的是比较
- 一.前言这一篇来看看 SpringIOC 里面的一个细节点 , 来简单看看 BeanDefinition 这个对象 , 以及有没有办法对其进
- 什么是文件上传?文件上传就是把用户的信息保存起来。为什么需要文件上传?在用户注册的时候,可能需要用户提交照片。那么这张照片就应该要进行保存。
- 微服务编排框架起始原因 是 我们公司 分布式事务 使用的是 seate 分布式事务框架,现在只在一些小部分使用,因为考虑到seate 对性能
- 前言随着网络技术的发展、计算机应用水平广泛提高,原来系统的时效性、数据的正确性、操作的方便性上都存在不足,已影响到系统的正常使用。经过考察比
- MyBatis-Spring允许你在Service Bean中注入映射器。当使用映射器时,就像调用DAO那样来调用映射器就可以了,但是此时你
- 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把
- 问题分析疑惑满满小枫听到这个面试题的时候,心想这是什么水面试官,怎么问这么简单的题目,心想一个for循环加上equal判断再删除不就完事了吗