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:<a href="http://my.turbine.sever:8080/turbine.stream?cluster=" class="bare">http://my.turbine.sever:8080/turbine.stream?cluster=;
(如果名称为“默认值”,则可以省略群集参数)。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的。