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

相关文章
相关标签/搜索