Spring Cloud Document翻译(七)--Hystrix超时和Ribbon客户端

本文探讨了在微服务架构中使用Hystrix和Turbine进行监控的最佳实践,强调了Hystrix超时配置的重要性,以及如何集成Turbine来聚合多个实例的Hystrix数据,提供了详细的配置指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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指标。它只能提供每个实例已经收集到输入通道中的指标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值