微服务搭建集成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


猜你喜欢
- 目录1)在程序集中添加资源2)在程序集中查找资源这一篇单独拿出来分析这个程序集资源,为的就是不想让大家把程序集资源和exe程序强关联,因为程
- 强调一下阅读系统源码,起码要对进程间通信要了解,对binder机制非常非常清楚,binder就是指南针,要不然你会晕头转向;强行阅读,就容易
- 1.狂妄的WPF相对传统的Windows图形编程,需要做很多复杂的工作,引用许多不同的API。例如:WinForm(带控件表单)、GDI+(
- 1.Context的应用Context在启动协程模式中就已经遇到过叫CoroutineContext,它的意思就是协程上下文,线程的切换离不
- 使用FastJson解决long类型在js中失去精度问题1.pom中需要将默认的jackson排除掉<dependency>&n
- 本文实例讲述了Java针对封装数组的简单复杂度分析方法。分享给大家供大家参考,具体如下:完成了数组的封装之后我们还需对其进行复杂度分析:此处
- 圆形识别方案识别流程判断是否为封闭图形;根据圆的方程,取输入点集中的1/6、3/6、5/6处的三个点,求得圆的方程,获取圆心及半径;取点集中
- 一、介绍knife4j增强版本的Swagger 前端UI,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍,更名也是希望把
- 使用AspectJ实现AOP注解方式XML方式AspectJ简介AspectJ是一个基于Java语言的AOP框架Spring2.0以后新增了
- 导入thymeleaf<dependency> <groupId>org.springframework
- 编写RedisConfig首先我们要明白RedisConfig中需要包含什么,首先看看我们直接使用RedisTemplate的问题,我们就知
- 在之前,已经学习到了线程的创建和状态控制,但是每个线程之间几乎都没有什么太大的联系。可是有的时候,可能存在多个线程多同一个数据进行操作,这样
- 本文实例讲述了C#实现在Form里面内嵌dos窗体的方法。分享给大家供大家参考。具体如下:using System;using System
- 本文实例为大家分享了C#二维码图片识别的具体代码,供大家参考,具体内容如下怎么用NuGet和怎么配置log4net就不介绍了,直接上代码(V
- 本文实例讲述了C#采用FileSystemWatcher实现监视磁盘文件变更的方法。分享给大家供大家参考。具体实现方法如下:简化需求:有一个
- 本文实例讲述了Android实现拍照上传功能的方法。分享给大家供大家参考,具体如下:1、LoginWindow.java --登录窗口pac
- using System;using System.Collections.Generic;using System.Linq;using
- 本文介绍了spring整合JMS实现同步收发消息(基于ActiveMQ的实现),分享给大家,具体如下:1. 安装ActiveMQ注意:JDK
- Jackson,我感觉是在Java与Json之间相互转换的最快速的框架,当然Google的Gson也很不错,但是参照网上有人的性能测试,看起
- 虚拟摇杆在移动游戏开发中,是很常见的需求,今天我们在Unity中,使用UGUI来实现一个简单的虚拟摇杆功能。1.打开Unity,新创建一个U