15. Hystrix超時和Ribbon客戶端
使用包裝Ribbon客戶端的Hystrix Command時,要確保將Hystrix超時配置爲長於配置的Ribbon超時,包括可能進行的任何可能的重試。例如,如果您的Ribbon連接超時爲一秒,並且Ribbon客戶端可能會重試該請求三次,那麼您的Hystrix超時應該略大於三秒。
15.1如何包含Hystrix儀表板
要在項目中包含Hystrix儀表板,請使用具有組ID爲 org.springframework.cloud
和artifact ID爲 spring-cloud-starter-netflix-hystrix-dashboard
的Starter。有關使用當前Spring Cloud Release Train設置構建系統的詳細信息,請參閱Spring Cloud Project頁面。
要運行Hystrix儀表板,請使用@EnableHystrixDashboard註解您的Spring Boot主類
。然後訪問/hystrix
並將儀表板指向客戶端應用程序中的某個實例的/hystrix.stream
端點。
當使用HTTPS連接到 |
15.2 Turbine
查看單個實例的Hystrix數據對於系統的整體運行狀況不是很有用。Turbine是一個應用程序,它將所有相關/hystrix.stream
端點聚合爲一個組合/turbine.stream
,以便在Hystrix儀表板中使用。個別實例通過Eureka定位。運行Turbine需要使用@EnableTurbine
註解來註解主類(例如,通過使用spring-cloud-starter-netflix-turbine來設置類路徑)。Turbine 1 wiki中所有記錄的配置屬性均適用。唯一的區別是turbine.instanceUrlSuffix
不需要前置端口,因爲這是自動處理的,除非turbine.instanceInsertPort=false
。
默認情況下,Turbine將通過在Eureka中查找hostName和port項目來查找註冊實例的 |
eureka:
instance:
metadata-map:
management.port: ${management.port:8081}
該turbine.appConfig
配置的關鍵是,Turbin用來查找實例的Eureka serviceIds列表。然後,Turbine流在Hystrix儀表板中使用的URL類似於以下內容:
https://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
成爲cluster key(即,客戶的InstanceInfo
具有CUSTOMERS的
appName
)。另一個不同的示例是turbine.clusterNameExpression=aSGName,它
從AWS ASG名稱獲取羣集名稱。以下清單顯示了另一個示例:
turbine:
aggregator:
clusterConfig: SYSTEM,USER
appConfig: customers,stores,ui,admin
clusterNameExpression: metadata['cluster']
在前面的示例中,來自四個服務的集羣名稱是從其元數據映射中提取的,並且期望包含SYSTEM
和USER的值
。
要爲所有應用程序使用“ 默認 ”集羣,您需要一個字符串文字表達式(如果它在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的key是主機名),請設置 |
15.2.1集羣端點
在某些情況下,其他應用程序可能會知道在Turbine中配置了哪些clusters。爲了支持這一點,您可以使用/clusters
端點,該端點將返回所有已配置集羣的JSON數組。
GET /集羣。
[
{
"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
禁用此端點。
15.3 Turbine Stream
在某些環境中(例如在PaaS中),從所有分佈式Hystrix命令中提取度量標準的經典Turbine模型不起作用。在這種情況下,您可能希望讓Hystrix命令將指標推送到Turbine。Spring Cloud通過消息傳遞實現這一點。要在客戶端上執行,請爲添加spring-cloud-netflix-hystrix-stream和你選擇的
spring-cloud-starter-stream-*
依賴項。有關代理以及如何配置客戶端憑據的詳細信息,請參閱Spring Cloud Stream文檔。它應該爲local broker開箱即用。
在服務器端,創建一個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儀表板中的流輸入字段。電路以它們各自的serviceId
爲前綴,後跟一個點(.
),然後是電路名稱。
Spring Cloud提供了一個spring-cloud-starter-netflix-turbine-stream,它
具有運行Turbine Stream服務器所需的所有依賴。然後,您可以添加您選擇的Stream binder - 例如spring-cloud-starter-stream-rabbit
。
Turbine Stream服務器也支持該cluster
參數。與Turbine服務器不同,Turbine Stream使用eureka serviceId作爲集羣名稱,這些不可配置。
如果Turbine Stream服務器在端口8989上運行,並且您的環境中my.turbine.server
有兩個eureka serviceId 分別是customers和
products
,則您的Turbine Stream服務器上將提供以下URL。缺省情況下,空集羣名稱將提供Turbine Stream服務器接收的所有指標。
https://my.turbine.sever:8989/turbine.stream?cluster=customers
https://my.turbine.sever:8989/turbine.stream?cluster=products
https://my.turbine.sever:8989/turbine.stream?cluster=default
https://my.turbine.sever:8989/turbine.stream
因此,您可以將eureka serviceId用作Turbine儀表板(或任何兼容的儀表板)的羣集名稱。你並不需要配置任何屬性,如turbine.appConfig
,turbine.clusterNameExpression和
turbine.aggregator.clusterConfig
爲您的Turbine流服務器。
Turbine Stream服務器使用Spring Cloud Stream從配置的輸入通道收集所有指標。這意味着它不會從每個實例主動收集Hystrix指標。它只能提供每個實例已經收集到輸入通道中的指標。 |