使用包裝Ribbon客戶端的Hystrix命令時,要確保將Hystrix超時配置爲長於配置的Ribbon超時,包括可能進行的任何可能的重試,例如,若是你的Ribbon鏈接超時爲一秒,而且Ribbon客戶端可能會重試該請求三次,那麼你的Hystrix超時應該略大於三秒。git
要在項目中包含Hystrix儀表板,請使用組ID爲org.springframework.cloud
和工件ID爲spring-cloud-starter-netflix-hystrix-dashboard
的啓動器。github
要運行Hystrix儀表板,請使用@EnableHystrixDashboard
註解Spring Boot主類,而後訪問/hystrix
並將儀表板指向Hystrix客戶端應用程序中的單個實例的/hystrix.stream
端點。web
鏈接到使用HTTPS的
/hystrix.stream
端點時,JVM必須信任服務器使用的證書,若是證書不受信任,則必須將證書導入JVM,以便Hystrix儀表板成功鏈接到流端點。
查看單個實例的Hystrix數據在系統總體運行情況方面不是頗有用,Turbine是一個應用程序,它將全部相關的/hystrix.stream
端點聚合到一個組合的/turbine.stream
中,以便在Hystrix儀表板中使用,從Eureka定位單個實例。運行Turbine須要使用@EnableTurbine
註解來註解主類(例如,經過使用spring-cloud-starter-netflix-turbine
來設置類路徑),Turbine 1 wiki中全部記錄的配置屬性均適用。惟一的區別是turbine.instanceUrlSuffix
不須要前置端口,由於除非turbine.instanceInsertPort=false
,不然會自動處理。spring
默認狀況下,Turbine在註冊實例上查找/hystrix.stream
端點,方法是查找它在Eureka中的hostName
和port
條目,而後將/hystrix.stream
附加到它。若是實例的元數據包含management.port
,則使用它來代替/hystrix.stream
端點的port
值。默認狀況下,名爲management.port
的元數據條目等於management.port
配置屬性,能夠經過如下配置覆蓋它:
eureka: instance: metadata-map: management.port: ${management.port:8081}
turbine.appConfig
配置鍵是turbine用於查找實例的Eureka serviceId列表,而後,turbine流在Hystrix儀表板中使用,其URL相似於如下內容:segmentfault
http://my.turbine.server:8080/turbine.stream?cluster=CLUSTERNAME
若是名稱是default
,則能夠省略cluster
參數,cluster
參數必須與turbine.aggregator.clusterConfig
中的條目匹配,從Eureka返回的值是大寫的,所以,若是有一個名爲customers
的應用程序在Eureka註冊,則如下示例有效:數組
turbine: aggregator: clusterConfig: CUSTOMERS appConfig: customers
若是須要自定義Turbine應使用的集羣名稱(由於你不但願在turbine.aggregator.clusterConfig
配置中存儲集羣名稱),請提供TurbineClustersProvider
類型的Bean。服務器
clusterName
能夠經過turbine.clusterNameExpression
中的SPEL表達式進行自定義,其中根用做InstanceInfo
的實例,默認值爲appName
,這意味着Eureka serviceId
成爲羣集鍵(即,customers
的InstanceInfo
的appName
爲CUSTOMERS
)。另外一個示例是turbine.clusterNameExpression=aSGName
,它從AWS ASG名稱獲取集羣名稱,如下清單顯示了另外一個示例:app
turbine: aggregator: clusterConfig: SYSTEM,USER appConfig: customers,stores,ui,admin clusterNameExpression: metadata['cluster']
在前面的示例中,來自四個服務的集羣名稱是從其元數據映射中提取的,而且應該具備包含SYSTEM
和USER
的值。負載均衡
要爲全部應用程序使用「default」羣集,你須要一個字符串文字表達式(若是它在YAML中,則使用單引號並使用雙引號進行轉義):分佈式
turbine: appConfig: customers,stores clusterNameExpression: "'default'"
Spring Cloud提供了一個spring-cloud-starter-netflix-turbine
,它具備運行Turbine服務器所需的全部依賴關係,要添加Turbine,請建立一個Spring Boot應用程序並使用@EnableTurbine
對其進行註解。
默認狀況下,Spring Cloud容許Turbine使用主機和端口來容許每一個主機、每一個集羣有多個進程,若是你但願Turbine內置的原生Netflix行爲不容許每一個主機、每一個羣集有多個進程(實例ID的鍵是主機名),請設置
turbine.combineHostPort=false
。
在某些狀況下,瞭解Turbine中配置了哪些集羣可能對其餘應用程序有用,爲了支持這一點,你可使用/clusters
端點,它將返回全部已配置集羣的JSON數組。
GET /clusters
[ { "name": "RACES", "link": "http://localhost:8383/turbine.stream?cluster=RACES" }, { "name": "WEB", "link": "http://localhost:8383/turbine.stream?cluster=WEB" } ]
能夠經過將turbine.endpoints.clusters.enabled
設置爲false
來禁用此端點。
在某些環境中(例如在PaaS設置中),從全部分佈式Hystrix命令中提取指標的經典Turbine模型不起做用,在這種狀況下,你可能但願讓Hystrix命令將指標推送到Turbine,Spring Cloud經過消息傳遞實現這一點。要在客戶端上實現這一點,請添加依賴spring-cloud-netflix-hystrix-stream
和你選擇的spring-cloud-starter-stream-*
。有關代理以及如何配置客戶端憑據的詳細信息,請參閱Spring Cloud Stream文檔,對於本地代理,這應該是開箱即用的。
在服務器端,建立一個Spring Boot應用程序並使用@EnableTurbineStream
註解它,Turbine Stream服務器須要使用Spring Webflux,所以spring-boot-starter-webflux
須要包含在你的項目中,默認狀況下,在將spring-cloud-starter-netflix-turbine-stream
添加到你的應用程序時,會包含spring-boot-starter-webflux
。
而後,你能夠將Hystrix儀表板指向Turbine Stream Server而不是單獨的Hystrix流,若是Turbine Stream在myhost
上的端口8989
上運行,則將http://myhost:8989
放入Hystrix儀表板的流輸入字段中,Circuit的前綴是各自的serviceId
,後跟一個點(·
),而後是Circuit名稱。
Spring Cloud提供了spring-cloud-starter-netflix-turbine-stream
,它具備運行Turbine Stream服務器所需的全部依賴關係,而後,你能夠添加你選擇的流綁定器 — 例如spring-cloud-starter-stream-rabbit
。
Turbine Stream服務器還支持cluster
參數,與Turbine服務器不一樣,Turbine Stream使用eureka serviceId做爲集羣名稱,這些不可配置。
若是Turbine Stream服務器在my.turbine.server
上的8989
端口上運行,而且你的環境中有兩個eureka serviceId爲customers
和products
,則你的Turbine Stream服務器上將提供如下URL,default
和空集羣名將提供Turbine Stream服務器接收的全部指標。
http://my.turbine.sever:8989/turbine.stream?cluster=customers http://my.turbine.sever:8989/turbine.stream?cluster=products http://my.turbine.sever:8989/turbine.stream?cluster=default http://my.turbine.sever:8989/turbine.stream
所以,你能夠將eureka serviceId用做Turbine儀表板(或任何兼容的儀表板)的集羣名稱,你無需爲Turbine Stream服務器配置任何屬性,如turbine.appConfig
、turbine.clusterNameExpression
和turbine.aggregator.clusterConfig
。
Turbine Stream服務器使用Spring Cloud Stream從配置的輸入通道收集全部指標,這意味着它不會從每一個實例主動收集Hystrix指標,它只能提供每一個實例已經收集到輸入通道中的指標。