微服务搭建集成Spring Cloud Turbine详解
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上找到。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。