Spring Cloud Document翻譯(七)--Hystrix超時和Ribbon客戶端

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連接到/hystrix.stream端點時,服務器使用的證書必須得到JVM的信任。如果證書不受信任,則必須將證書導入JVM,以便Hystrix儀表板成功連接到流端點。

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項目來查找註冊實例的/hystrix.stream端點,然後追加/hystrix.stream到它自身。如果實例的元數據包含management.port,則使用它來代替端點的port值。默認情況下,元數據條目management.port等於management.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']

在前面的示例中,來自四個服務的集羣名稱是從其元數據映射中提取的,並且期望包含SYSTEMUSER的值

要爲所有應用程序使用“ 默認 ”集羣,您需要一個字符串文字表達式(如果它在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是主機名),請設置turbine.combineHostPort=false

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.enabledfalse禁用此端點。

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.appConfigturbine.clusterNameExpressionturbine.aggregator.clusterConfig爲您的Turbine流服務器。

[注意]

Turbine Stream服務器使用Spring Cloud Stream從配置的輸入通道收集所有指標。這意味着它不會從每個實例主動收集Hystrix指標。它只能提供每個實例已經收集到輸入通道中的指標。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章