微服務(wù)搭建集成Spring Cloud Turbine詳解
1.概述
本文中,我將向你介紹Spring Cloud Netflix Turbine。它將多個(gè)Hystrix Metrics Streams 聚合為一個(gè),以便顯示在一個(gè)儀表板視圖中。
簡(jiǎn)要介紹Hystrix 。 在微服務(wù)架構(gòu)中,我們有許多小應(yīng)用程序相互通信以完成請(qǐng)求。這些下游服務(wù)有可能無法正確響應(yīng)或完全失敗。為了防止發(fā)生級(jí)聯(lián)故障,我們?yōu)槲⒎?wù)設(shè)置了Hystrix回退機(jī)制。
每個(gè)實(shí)現(xiàn)Hystrix的微服務(wù)都可以選擇公開Hystrix Metrics Streams(通過actuator端點(diǎn)/hystrix.stream),以便通過Hystrix Dashboard查看。
如果您想了解更多信息,我已在Spring Cloud:Hystrix中詳細(xì)介紹了這一點(diǎn)。
Turbine是Netflix的一個(gè)開源工具,用于將多個(gè)流聚合到一個(gè)流中。 Spring提供了一個(gè)很好的包裝器,以方便在Spring生態(tài)系統(tǒng)中使用。
2.搭建
類似于Spring Cloud:Hystrix的設(shè)置,后端服務(wù)如下所示:
- Eureka Server :作為服務(wù)注冊(cè)運(yùn)行并在端口8761上運(yùn)行。
- 推薦服務(wù):一個(gè)簡(jiǎn)單的REST服務(wù),只有一個(gè)端點(diǎn):/recommendations,并在端口8070上運(yùn)行。
- 用戶服務(wù):一個(gè)簡(jiǎn)單的REST服務(wù),單個(gè)端點(diǎn)為:/personalized/{id},并在端口8060上運(yùn)行。
- Hystrix Turbine :Hystrix dashboard服務(wù),用于顯示Hystrix流,并在端口'9090'上運(yùn)行。
以下是我們?cè)?a target="_blank" >Eureka服務(wù)器上看到的服務(wù)列表:

user-service和recommendation-service都實(shí)現(xiàn)了Hystrix回退機(jī)制,并通過Actuator暴露了/hystrix.stream端點(diǎn):
- 用戶服務(wù)的Hystrix端點(diǎn):http://localhost:8060/actuator/hystrix.stream
- 用于推薦服務(wù)的Hystrix端點(diǎn):http://localhost:8070/actuator/hystrix.stream
我們可以在Hystrix dashboard中單獨(dú)查看這些,方法是在框中鍵入U(xiǎn)RL并單擊Monitor Stream即可:

你將看到如下指標(biāo)(metric):

注意:如果沒有看到任何流(stream),那么可能必須點(diǎn)擊該stream的服務(wù)端點(diǎn)。 例如:對(duì)于user-service,我們可以點(diǎn)擊http://localhost:8060/personalized/1來生成流。
3.安裝Turbine
你可能已經(jīng)意識(shí)到,查看單個(gè)流(stream)的效率不高,尤其是有許多微服務(wù)時(shí)。
Turbine可以將所有單獨(dú)的hystrix.stream聚合成一個(gè)turbine.stream,以便在Hystrix Dashboard上查看。
它使用DiscoveryClient接口找出生產(chǎn)/hystrix.stream的相關(guān)服務(wù)。
要將Turbine添加到Hystrix dashboard,請(qǐng)?zhí)砑右韵乱蕾図?xiàng):
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-turbine</artifactId> </dependency>
注意:這是Turbine的starter依賴,默認(rèn)情況下使用Spring Cloud Eureka作為服務(wù)發(fā)現(xiàn)。 如果使用的是Spring Cloud Consul,請(qǐng)使用以下依賴項(xiàng):
<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按預(yù)期工作,我們必須在application.properties中添加一些細(xì)節(jié):
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服務(wù)器的位置,以及它需要獲取/ hystrix.stream的應(yīng)用程序。并將turbine.clusterNameExpression設(shè)為new String("default"),即默認(rèn)集群名稱為“default”。
我們可以打開http://localhost:9090/turbine.stream?cluster=default來查看user-service和recommendation-service的聚合流:

同樣,如果沒有查看到任何內(nèi)容,只需點(diǎn)擊user-service和recommendation-service端點(diǎn)即可生成流。
我們還可以在Hystrix dashboard上使用此URL來生成一個(gè)很好的聚合視圖:

有時(shí),您可能希望將Eureka的serviceId用作dashboard的集群名稱。這可以通過設(shè)置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 =用戶服務(wù),推薦服務(wù)
您還可以通過點(diǎn)擊/clusters端點(diǎn)來檢查Turbine應(yīng)用程序中當(dāng)前已配置的集群。
可以通過將turbine.endpoints.clusters.enabled設(shè)置為false來禁用此端點(diǎn)。

所以,現(xiàn)在我們可以將turbine.stream視為Eureka ID,例如:http://localhost:9090/turbine.stream?cluster=USER-SERVICE

如果特定服務(wù)的多個(gè)實(shí)例正在運(yùn)行,Turbine將按照集群進(jìn)行分揀并將其顯示在結(jié)果中。
4.總結(jié)
在本文中,我們已經(jīng)介紹了如何在Hystrix stream的基礎(chǔ)上設(shè)置Turbine以獲得聚合視圖。我們首先看到了Turbine從所有服務(wù)中獲取Hystrix stream的經(jīng)典方法。
與往常一樣,本文中使用的示例代碼可以在GitHub上找到。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Spring Cloud多個(gè)微服務(wù)之間調(diào)用代碼實(shí)例
- 詳解Spring Cloud Alibaba Sidecar多語言微服務(wù)異構(gòu)
- SpringBoot+SpringCloud用戶信息微服務(wù)傳遞實(shí)現(xiàn)解析
- springcloud微服務(wù)基于redis集群的單點(diǎn)登錄實(shí)現(xiàn)解析
- SpringCloud微服務(wù)之Hystrix組件實(shí)現(xiàn)服務(wù)熔斷的方法
- springcloud使用Hystrix進(jìn)行微服務(wù)降級(jí)管理
- SpringCloud實(shí)現(xiàn)Redis在各個(gè)微服務(wù)的Session共享問題
- SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用
相關(guān)文章
Java HashSet(散列集),HashMap(散列映射)的簡(jiǎn)單介紹
這篇文章主要介紹了Java HashSet(散列集),HashMap(散列映射)的簡(jiǎn)單介紹,幫助大家更好的理解和學(xué)習(xí)Java集合框架的相關(guān)知識(shí),感興趣的朋友可以了解下2021-01-01
Spring中的BeanFactory對(duì)象實(shí)例化工廠詳解
這篇文章主要介紹了Spring中的BeanFactory對(duì)象實(shí)例化工廠詳解,BeanFactory及其子類是Spring IOC容器中最重要的一個(gè)類,BeanFactory由類名可以看出其是一個(gè)Bean工廠類,其實(shí)它確實(shí)是一個(gè)Bean工廠類,完成Bean的初始化操作,需要的朋友可以參考下2023-12-12
Spring Boot中使用Spring-data-jpa的配置方法詳解
今天小編就為大家分享一篇關(guān)于Spring Boot中使用Spring-data-jpa的配置方法詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
MyBatisPlus利用Service實(shí)現(xiàn)獲取數(shù)據(jù)列表
這篇文章主要為大家詳細(xì)介紹了怎樣使用 IServer 提供的 list 方法查詢多條數(shù)據(jù),這些方法將根據(jù)查詢條件獲取多條數(shù)據(jù),感興趣的可以了解一下2022-06-06
java eclipse 整個(gè)項(xiàng)目或包查找只定字符串并替換操作
這篇文章主要介紹了java eclipse 整個(gè)項(xiàng)目或包查找只定字符串并替換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Array?Index?Out?of?Bounds:數(shù)組越界錯(cuò)誤解決方案及調(diào)試技巧
數(shù)組越界訪問是指訪問數(shù)組中超出其有效索引范圍的元素,這是一種常見的編程錯(cuò)誤,可能導(dǎo)致程序崩潰或數(shù)據(jù)損壞,下面這篇文章主要給大家介紹了關(guān)于Array?Index?Out?of?Bounds:數(shù)組越界錯(cuò)誤解決方案及調(diào)試技巧的相關(guān)資料,需要的朋友可以參考下2024-08-08

