Spring Cloud 參考文檔(Hystrix超時和Ribbon客戶端)

Hystrix超時和Ribbon客戶端

使用包裝Ribbon客戶端的Hystrix命令時,要確保將Hystrix超時配置爲長於配置的Ribbon超時,包括可能進行的任何可能的重試,例如,若是你的Ribbon鏈接超時爲一秒,而且Ribbon客戶端可能會重試該請求三次,那麼你的Hystrix超時應該略大於三秒。git

如何包含Hystrix儀表板

要在項目中包含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儀表板成功鏈接到流端點。

Turbine

查看單個實例的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中的 hostNameport條目,而後將 /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成爲羣集鍵(即,customersInstanceInfoappNameCUSTOMERS)。另外一個示例是turbine.clusterNameExpression=aSGName,它從AWS ASG名稱獲取集羣名稱,如下清單顯示了另外一個示例:app

turbine:
  aggregator:
    clusterConfig: SYSTEM,USER
  appConfig: customers,stores,ui,admin
  clusterNameExpression: metadata['cluster']

在前面的示例中,來自四個服務的集羣名稱是從其元數據映射中提取的,而且應該具備包含SYSTEMUSER的值。負載均衡

要爲全部應用程序使用「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來禁用此端點。

Turbine流

在某些環境中(例如在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爲customersproducts,則你的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.appConfigturbine.clusterNameExpressionturbine.aggregator.clusterConfig

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

上一篇:斷路器:Hystrix客戶端

下一篇:客戶端負載均衡器:Ribbon

相關文章
相關標籤/搜索