Spring Cloud Turbine

1.概述

本文中,我將向你介紹Spring Cloud Netflix Turbine。它將多個Hystrix Metrics Streams 聚合爲一個,以便顯示在一個儀表板視圖中。
簡要介紹Hystrix 。 在微服務架構中,咱們有許多小應用程序相互通訊以完成請求。這些下游服務有可能沒法正確響應或徹底失敗。爲了防止發生級聯故障,咱們爲微服務設置了Hystrix回退機制。html

每一個實現Hystrix的微服務均可以選擇公開Hystrix Metrics Streams(經過actuator端點/hystrix.stream),以便經過Hystrix Dashboard查看。java

若是您想了解更多信息,我已在Spring Cloud:Hystrix中詳細介紹了這一點。git

TurbineNetflix的一個開源工具,用於將多個流聚合到一個流中。 Spring提供了一個很好的包裝器,以方便在Spring生態系統中使用。github

2.搭建

相似於Spring Cloud:Hystrix的設置,後端服務以下所示:spring

  • Eureka Server :做爲服務註冊運行並在端口8761上運行。
  • 推薦服務:一個簡單的REST服務,只有一個端點:/recommendations,並在端口8070上運行。
  • 用戶服務:一個簡單的REST服務,單個端點爲:/personalized/{id},並在端口8060上運行。
  • Hystrix Turbine :Hystrix dashboard服務,用於顯示Hystrix流,並在端口’9090’上運行。

如下是咱們在Eureka服務器上看到的服務列表:
在這裏插入圖片描述後端

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便可:
在這裏插入圖片描述
你將看到以下指標(metric):
在這裏插入圖片描述
注意:若是沒有看到任何流(stream),那麼可能必須點擊該stream的服務端點。 例如:對於user-service,咱們能夠點擊http://localhost:8060/personalized/1來生成流。架構

3.安裝Turbine

你可能已經意識到,查看單個流(stream)的效率不高,尤爲是有許多微服務時。app

Turbine能夠將全部單獨的hystrix.stream聚合成一個turbine.stream,以便在Hystrix Dashboard上查看。spring-boot

它使用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的聚合流:
在這裏插入圖片描述

一樣,若是沒有查看到任何內容,只需點擊user-servicerecommendation-service端點便可生成流。

咱們還能夠在Hystrix dashboard上使用此URL來生成一個很好的聚合視圖:

在這裏插入圖片描述

有時,您可能但願將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來禁用此端點。

在這裏插入圖片描述
因此,如今咱們能夠將turbine.stream視爲Eureka ID,例如:http://localhost:9090/turbine.stream?cluster=USER-SERVICE

在這裏插入圖片描述
若是特定服務的多個實例正在運行,Turbine將按照集羣進行分揀並將其顯示在結果中。

4.總結

在本文中,咱們已經介紹瞭如何在Hystrix stream的基礎上設置Turbine以得到聚合視圖。咱們首先看到了Turbine從全部服務中獲取Hystrix stream的經典方法。

與往常同樣,本文中使用的示例代碼能夠在GitHub上找到。

做者:Dhananjay Singh

譯者: Leesen

在這裏插入圖片描述

相關文章
相關標籤/搜索