本文中,我將向你介紹Spring Cloud Netflix Turbine。它將多個Hystrix Metrics Streams 聚合爲一個,以便顯示在一個儀表板視圖中。
簡要介紹Hystrix 。 在微服務架構中,咱們有許多小應用程序相互通訊以完成請求。這些下游服務有可能沒法正確響應或徹底失敗。爲了防止發生級聯故障,咱們爲微服務設置了Hystrix
回退機制。html
每一個實現Hystrix
的微服務均可以選擇公開Hystrix Metrics Streams(經過actuator
端點/hystrix.stream
),以便經過Hystrix Dashboard
查看。java
若是您想了解更多信息,我已在Spring Cloud:Hystrix中詳細介紹了這一點。git
Turbine是Netflix
的一個開源工具,用於將多個流聚合到一個流中。 Spring
提供了一個很好的包裝器,以方便在Spring
生態系統中使用。github
相似於Spring Cloud:Hystrix
的設置,後端服務以下所示:spring
/recommendations
,並在端口8070上運行。/personalized/{id}
,並在端口8060上運行。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
來生成流。架構
你可能已經意識到,查看單個流(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>
注意:這是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
將按照集羣進行分揀並將其顯示在結果中。
在本文中,咱們已經介紹瞭如何在Hystrix stream
的基礎上設置Turbine
以得到聚合視圖。咱們首先看到了Turbine
從全部服務中獲取Hystrix stream
的經典方法。
與往常同樣,本文中使用的示例代碼能夠在GitHub上找到。
做者:Dhananjay Singh
譯者: Leesen