电路怎么又闭合了?

How circuit is closed again?

我正在尝试了解 Hystrix。我了解当服务调用第三方服务并且该服务没有响应并且已超过配置的阈值时,电路将打开并且后续调用将被短路。

但是我无法理解电路是如何再次闭合的。让我们假设我们的服务正在调用 3rd 方服务并且该服务不能正常工作所以电路被打开。 5 分钟后,服务开始正常工作,现在电路应该关闭。调用服务如何知道第 3 方服务已开始正常运行,现在应关闭电路?

实际上有三种状态:OPEN、CLOSED和HALF_OPEN。一旦断路器打开并且经过了一定的时间,它就会让一个请求偷偷通过。这是 HALF_OPEN 状态。如果成功,断路器将关闭,否则它 returns 进入 OPEN 状态,直到该时间再次过去,它再次进入 HALF_OPEN 状态。您可以使用 circuitBreaker.sleepWindowInMilliseconds 属性.

指定从 OPEN 过渡到 HALF_OPEN 之间的时间量

考虑 Hytrix 断路器从关闭到打开的转换。它使针对该断路器的所有请求短路。

一段时间后(HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds())下一个请求被允许通过 (这是半开状态)。

如果请求失败,断路器returns在休眠期间window进入OPEN状态。 因此,这个 HALF-OPEN 状态调用决定了是打开还是关闭电路。

如果请求成功,断路器转换为 CLOSED 并且 1. 中的逻辑再次接管。结帐 hystrix working.