上一篇咱們介紹了使用Hystrix Dashboard來展現Hystrix用於熔斷的各項度量指標。經過Hystrix Dashboard,咱們能夠方便的查看服務實例的綜合狀況,好比:服務調用次數、服務調用延遲等。可是僅經過Hystrix Dashboard咱們只能實現對服務當個實例的數據展示,在生產環境咱們的服務是確定須要作高可用的,那麼對於多實例的狀況,咱們就須要將這些度量指標數據進行聚合。下面,在本篇中,咱們就來介紹一下另一個工具:Turbine。html
在開始使用Turbine以前,咱們先回顧一下上一篇中實現的架構,以下圖所示:spring
其中,咱們構建的內容包括:express
eureka-consumer-ribbon-hystrix
服務的Hystrix數據下面,咱們將在上述架構基礎上,引入Turbine來對服務的Hystrix數據進行聚合展現。這裏咱們將分別介紹兩種聚合方式。架構
具體實現步驟以下:app
<parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Dalston.SR1</version> <relativePath /> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> |
TurbineApplication
,並使用@EnableTurbine
註解開啓Turbine。 @Configuration @EnableAutoConfiguration @EnableTurbine @EnableDiscoveryClient public class TurbineApplication { public static void main(String[] args) { SpringApplication.run(TurbineApplication.class, args); } } |
application.properties
加入eureka和turbine的相關配置,具體以下: spring.application.name=turbine server.port=8989 management.port=8990 eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ turbine.app-config=eureka-consumer-ribbon-hystrix turbine.cluster-name-expression="default" turbine.combine-host-port=true |
參數說明異步
turbine.app-config
參數指定了須要收集監控信息的服務名;turbine.cluster-name-expression
參數指定了集羣名稱爲default,當咱們服務數量很是多的時候,能夠啓動多個Turbine服務來構建不一樣的聚合集羣,而該參數能夠用來區分這些不一樣的聚合集羣,同時該參數值能夠在Hystrix儀表盤中用來定位不一樣的聚合集羣,只須要在Hystrix Stream的URL中經過cluster
參數來指定;turbine.combine-host-port
參數設置爲true
,可讓同一主機上的服務經過主機名與端口號的組合來進行區分,默認狀況下會以host來區分不一樣的服務,這會使得在本地調試的時候,本機上的不一樣服務聚合成一個服務來統計。在完成了上面的內容構建以後,咱們來體驗一下Turbine對集羣的監控能力。分別啓動eureka-server
、eureka-client
、eureka-consumer-ribbon-hystrix
、turbine
以及hystrix-dashboard。訪問Hystrix Dashboard,並開啓對
http://localhost:8989/turbine.stream`的監控,這時候,咱們將看到針對服務`eureka-consumer-ribbon-hystrix`的聚合監控數據。spring-boot
而此時的架構以下圖所示:工具
Spring Cloud在封裝Turbine的時候,還實現了基於消息代理的收集實現。因此,咱們能夠將全部須要收集的監控信息都輸出到消息代理中,而後Turbine服務再從消息代理中異步的獲取這些監控信息,最後將這些監控信息聚合並輸出到Hystrix Dashboard中。經過引入消息代理,咱們的Turbine和Hystrix Dashoard實現的監控架構能夠改爲以下圖所示的結構:post
從圖中咱們能夠看到,這裏多了一個重要元素:RabbitMQ。對於RabbitMQ的安裝與基本時候咱們能夠查看以前的《Spring Boot中使用RabbitMQ》一文,這裏不作過多的說明。下面,咱們能夠來構建一個新的應用來實現基於消息代理的Turbine聚合服務,具體步驟以下:spa
turbine-amqp
。pom.xml
,具體依賴內容以下: <parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Dalston.SR1</version> <relativePath /> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> |
能夠看到這裏主要引入了spring-cloud-starter-turbine-amqp
依賴,它實際上就是包裝了spring-cloud-starter-turbine-stream
和pring-cloud-starter-stream-rabbit
。
注意:這裏咱們須要使用Java 8來運行
@EnableTurbineStream
註解來啓用Turbine Stream的配置。 @Configuration @EnableAutoConfiguration @EnableTurbineStream @EnableDiscoveryClient public class TurbineApplication { public static void main(String[] args) { SpringApplication.run(TurbineApplication.class, args); } } |
application.properties
文件: spring.application.name=turbine-amqp server.port=8989 management.port=8990 eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ |
對於Turbine的配置已經完成了,下面咱們須要對服務消費者eureka-consumer-ribbon-hystrix
作一些修改,使其監控信息可以輸出到RabbitMQ上。這個修改也很是簡單,只須要在pom.xml
中增長對spring-cloud-netflix-hystrix-amqp
依賴,具體以下:
<dependencies> ... <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-hystrix-amqp</artifactId> </dependency> </dependencies> |
在完成了上面的配置以後,咱們能夠繼續以前的全部項目(除turbine之外),並經過Hystrix Dashboard開啓對http://localhost:8989/turbine.stream
的監控,咱們能夠得到如以前實現的一樣效果,只是這裏咱們的監控信息收集時是經過了消息代理異步實現的。源碼來源