资讯专栏INFORMATION COLUMN

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

pf_miles / 1519人阅读

摘要:要运行仪表板,请使用注解主类,然后访问并将仪表板指向客户端应用程序中的单个实例的端点。连接到使用的端点时,必须信任服务器使用的证书,如果证书不受信任,则必须将证书导入,以便仪表板成功连接到流端点。

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指标,它只能提供每个实例已经收集到输入通道中的指标。
上一篇:断路器:Hystrix客户端 下一篇:客户端负载均衡器:Ribbon

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74275.html

相关文章

  • Spring Cloud 参考文档户端负载均衡器:Ribbon

    摘要:客户端负载均衡器是一个客户端负载均衡器,可以让你对和客户端的行为进行大量控制,已经使用了,因此,如果你使用,此部分也适用。 客户端负载均衡器:Ribbon Ribbon是一个客户端负载均衡器,可以让你对HTTP和TCP客户端的行为进行大量控制,Feign已经使用了Ribbon,因此,如果你使用@FeignClient,此部分也适用。 Ribbon中的一个核心概念是命名客户端,每个负载均...

    Songlcy 评论0 收藏0
  • spring-cloud-feign源码深度解析

    摘要:内部使用了的动态代理为目标接口生成了一个动态代理类,这里会生成一个动态代理原理统一的方法拦截器,同时为接口的每个方法生成一个拦截器,并解析方法上的元数据,生成一个请求模板。的核心源码解析到此结束了,不知道是否对您有无帮助,可留言跟我交流。 Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插拔注释支持,包...

    vibiu 评论0 收藏0
  • Spring Cloud 参考文档(断路器:Hystrix户端

    摘要:以下示例显示了具有断路器的最小服务器由名为的库提供,在连接到断路器的代理中自动包装带有该注解的,断路器计算何时打开和关闭电路以及在发生故障时应采取的措施。上一篇服务发现下一篇超时和客户端 断路器:Hystrix客户端 Netflix创建了一个名为Hystrix的库,用于实现断路器模式,在微服务架构中,通常有多层服务调用,如以下示例所示: 较低级别的服务中的服务故障可能导致级联故障一直到...

    novo 评论0 收藏0
  • SpringCloud(第 020 篇)Zuul 网关模块添加 listOfServers 属性,达

    摘要:注意注解能注册到服务上,是因为该注解包含了客户端的注解,该是一个复合注解。地址可以查看该微服务网关代理了多少微服务的。 SpringCloud(第 020 篇)Zuul 网关模块添加 listOfServers 属性,达到客户端负载均衡的能力 - 一、大致介绍 1、本章节添加另外一个属性 listOfServers 来给 zuul 赋上异样的功能色彩,提供负载均衡的能力; 2、而其实说...

    Dogee 评论0 收藏0
  • SpringCloud(第 015 篇)电影Ribbon微服务集成Hystrix增加隔离策略控制指标

    摘要:传播安全上下文或使用,通过增加的属性,来增加相关的配置来达到执行隔离策略,控制线程数或者控制并发请求数来达到熔断降级的作用。 SpringCloud(第 015 篇)电影Ribbon微服务集成Hystrix增加隔离策略控制线程数或请求数来达到熔断降级的作用 - 一、大致介绍 1、本章节介绍关于Hystrix的2种隔离方式(Thread Pool 和 Semaphores); 2、Thr...

    RobinQu 评论0 收藏0

发表评论

0条评论

pf_miles

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<