使用 Hystrix 进行容错

2025年1月11日 | 阅读 3 分钟

微服务必须具有极高的可靠性,因为它们相互依赖。微服务架构包含大量的小型微服务。这些微服务相互通信以满足它们的需求。

微服务的实例可能会频繁地启动和停止。随着微服务之间交互次数的增加,微服务在系统中发生故障的几率也会增加。

容错性

考虑一个场景,其中六个微服务相互通信。 microservice-5 在某个时候停止运行,所有其他微服务都直接或间接依赖于它,因此所有其他服务也停止运行。

解决这个问题的方法是在微服务发生故障时使用一个回退方案。微服务的这一方面被称为容错

Fault Tolerance with Hystrix

容错可以通过断路器来实现。它是一种封装对外部服务的请求并检测它们何时失败的模式。如果检测到故障,断路器就会打开。所有后续请求都会立即返回一个错误,而不是向运行状况不佳的服务发出请求。它会监视并检测出现故障并与其他服务行为不当的服务。它拒绝调用,直到它再次恢复健康。

Hystrix

Hystrix 是一个控制微服务之间交互以提供延迟和容错的库。此外,修改 UI 以让用户知道某些内容可能未按预期工作或需要更多时间也很有意义。

使用 Hystrix 实现容错

步骤 1: 打开 limits-servicepom.xml 文件并添加 Hystrix 依赖项

步骤 2: 打开 LimitsServicesApplication.java 文件并通过使用注解 @EnableHystrix 启用 Hystrix。

LimitsServicesApplication.java

步骤 3: 打开 LimitsConfigurationController.java 文件并创建一个 Get 方法。

让我们了解一下上述方法中发生了什么。

在上述方法中,我们创建了一个用于容错的 Get 映射。在下一行中,我们使用注解 @HystrixCommand 来配置回退方法。我们定义了一个名为 fallbackRetrieveConfigurations() 的方法,该方法在发生任何故障时返回默认值。

回退方法

回退方法是在发生故障时调用的方法。 Hystrix 允许我们为每个服务方法定义一个回退方法。 这里出现一个问题,如果方法抛出异常,应该向使用者返回什么?

因此,答案是,如果 retrieveConfiguraions() 失败,则调用方法 fallbackRetrieveConfigurations()。 回退方法返回硬编码的 LimitConfiguration 实例。

步骤 4: 打开浏览器并调用 URL https://:8080/fault-tolerance-example。它将返回我们在 fallbackRetrieveConfigurations() 方法中返回的值。

Fault Tolerance with Hystrix
下一主题#