Spring-Cloud-参考文档Hystrix超时和Ribbon客户端

6次阅读

共计 4195 个字符,预计需要花费 11 分钟才能阅读完成。

Hystrix 超时和 Ribbon 客户端

使用包装 Ribbon 客户端的 Hystrix 命令时,要确保将 Hystrix 超时配置为长于配置的 Ribbon 超时,包括可能进行的任何可能的重试,例如,如果你的 Ribbon 连接超时为一秒,并且 Ribbon 客户端可能会重试该请求三次,那么你的 Hystrix 超时应该略大于三秒。

如何包含 Hystrix 仪表板

要在项目中包含 Hystrix 仪表板,请使用组 ID 为 org.springframework.cloud 和工件 ID 为 spring-cloud-starter-netflix-hystrix-dashboard 的启动器。

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

连接到使用 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,否则会自动处理。

默认情况下,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 类似于以下内容:

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 名称获取集群名称,以下清单显示了另一个示例:

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

正文完
 0