Hystrix超时和Ribbon客户

当使用包含Ribbon客户端的Hystrix命令时,您需要确保您的Hystrix超时配置为长于配置的Ribbon超时,包括任何可能的重试。例如,如果您的Ribbon连接超时为一秒钟,并且Ribbon客户端可能会重试该请求三次,那么您的Hystrix超时时间应该略超过三秒钟。

如何加入Hystrix仪表板

要在项目中包含Hystrix仪表板,请使用组org.springframework.cloud和工件ID spring-cloud-starter-hystrix-dashboard的起始器。有关 使用当前的Spring Cloud发布列表设置构建系统的详细信息,请参阅Spring Cloud项目页面。

运行Hystrix仪表板使用@EnableHystrixDashboard注释您的Spring Boot主类。然后访问/hystrix并将仪表板指向Hystrix客户端应用程序中的单个实例/hystrix.stream端点。

Turbine

查看个别实例Hystrix数据在系统的总体健康状况方面不是很有用。Turbine是将所有相关/hystrix.stream端点聚合到Hystrix仪表板中使用的组合/turbine.stream的应用程序。单个实例通过Eureka定位。运行Turbine就像使用@EnableTurbine注释(例如使用spring-cloud-starter-turbine设置类路径)注释主类一样简单。来自Turbine 1维基的所有文档配置属性都适用。唯一的区别是,turbine.instanceUrlSuffix不需要预先添加的端口,因为除非turbine.instanceInsertPort=false自动处理。

注意

默认情况下,Turbine通过在Eureka中查找其homePageUrl条目,然后将/hystrix.stream附加到注册的实例上查找/hystrix.stream端点。这意味着如果spring-boot-actuator在自己的端口上运行(这是默认值),则对/hystrix.stream的调用将失败。要使涡轮机找到正确端口的Hystrix流,需要向实例的元数据中添加management.port:

eureka:

  instance:

    metadata-map:

      management.port: ${management.port:8081}

配置密钥turbine.appConfig是涡轮机将用于查找实例的尤里卡服务列表。涡轮流然后在Hystrix仪表板中使用如下URL:http://my.turbine.sever:8080/turbine.stream?cluster=<CLUSTERNAME>;(如果名称为“默认”,则可以省略群集参数)。cluster参数必须与turbine.aggregator.clusterConfig中的条目匹配。从eureka返回的值是大写字母,因此如果有一个名为“customers”的Eureka注册了一个应用程序,我们希望该示例可以工作:

turbine:

  aggregator:

    clusterConfig: CUSTOMERS

  appConfig: customers

clusterName可以通过turbine.clusterNameExpression中的SPEL表达式使用root实例来定制InstanceInfo。默认值为appName,这意味着Eureka serviceId最终作为集群密钥(即客户的InstanceInfo具有appName“CUSTOMERS”)。一个不同的例子是turbine.clusterNameExpression=aSGName,它将从AWS ASG名称获取集群名称。另一个例子:

turbine:

  aggregator:

    clusterConfig: SYSTEM,USER

  appConfig: customers,stores,ui,admin

  clusterNameExpression: metadata['cluster']

在这种情况下,来自4个服务的集群名称从其元数据映射中提取,并且预期具有包含“SYSTEM”和“USER”的值。

要为所有应用程序使用“默认”集群,您需要一个字符串文字表达式(带单引号,并且如果它在YAML中也使用双引号进行转义):

turbine:

  appConfig: customers,stores

  clusterNameExpression: "'default'"

Spring Cloud提供了一个spring-cloud-starter-turbine,它具有运行Turbine服务器所需的所有依赖关系。只需创建一个Spring Boot应用程序并用@EnableTurbine进行注释。

注意

默认情况下,Spring Cloud允许Turbine使用主机和端口,以允许每个主机在每个群集中进行多个进程。如果你想建成Turbine,它的原生Netflix的行为不允许每个主机上的多个过程,每簇(关键实例ID是主机名),然后将该属性设置turbine.combineHostPort=false。

Turbine Stream

在某些环境中(例如,在PaaS设置中),从所有分布式Hystrix命令中提取度量的经典Turbine模型不起作用。在这种情况下,您可能希望使Hystrix命令将度量标准推送到Turbine,并且Spring Cloud可以使用消息传递。您需要在客户端上执行的所有操作都为您选择的spring-cloud-netflix-hystrix-stream和spring-cloud-starter-stream-*添加依赖关系(有关代理的详细信息,请参阅Spring Cloud Stream文档,以及如何配置客户端凭据,但是应该为当地经纪人开箱即用)。

在服务器端只需创建一个Spring Boot应用程序并使用@EnableTurbineStream进行注释,默认情况下将会出现在8989端口(将您的Hystrix仪表板指向该端口,任何路径)。您可以使用server.port或turbine.stream.port自定义端口。如果类路径中还有spring-boot-starter-web和spring-boot-starter-actuator,那么您可以通过提供不同的management.port在单独的端口(默认情况下使用Tomcat)打开Actuator端点。

然后,您可以将Hystrix仪表板指向Turbine Stream服务器,而不是单个Hystrix流。如果Turbine Stream在myhost上的端口8989上运行,则将http://myhost:8989放在Hystrix仪表板中的流输入字段中。电路将以各自的serviceId为前缀,后跟一个点,然后是电路名称。

Spring Cloud提供了一个spring-cloud-starter-turbine-stream,它具有您需要的Turbine Stream服务器运行所需的所有依赖项,只需添加您选择的Stream binder,例如spring-cloud-starter-stream-rabbit。您需要Java 8来运行应用程序,因为它是基于Netty的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 当使用包含Ribbon客户端的Hystrix命令时,您需要确保您的Hystrix超时配置为长于配置的Ribbon超...
    咔啡阅读 87评论 0赞 1
  • 当使用包含Ribbon客户端的Hystrix命令时,您需要确保您的Hystrix超时配置为长于配置的Ribbon超...
    咔啡阅读 72评论 0赞 1
  • 当使用包含Ribbon客户端的Hystrix命令时,您需要确保您的Hystrix超时配置为长于配置的Ribbon超...
    咔啡阅读 68评论 0赞 1
  • 当使用包含Ribbon客户端的Hystrix命令时,您需要确保您的Hystrix超时配置为长于配置的Ribbon超...
    咔啡阅读 300评论 0赞 1
  • 当使用包含Ribbon客户端的Hystrix命令时,您需要确保您的Hystrix超时配置为长于配置的Ribbon超...
    咔啡阅读 157评论 0赞 1

友情链接更多精彩内容