我将 Hystrix 用于其断路器功能,并且我注意到当满足所需条件时断路器不会立即跳闸。
例如使用以下配置:
withCircuitBreakerRequestVolumeThreshold(2),
withCircuitBreakerErrorThresholdPercentage(50)
如果我同步执行以下命令集(假设 C1-C3 具有相同的 CommandKey)C3 的行为方式我发现是出乎意料的:
// C1: Execute no-op command -- Error threshold 0%, Volume threshold 1
// C2: Execute exception throwing command -- Error threshold 50%, Volume threshold 2
// ---- Breaker should be tripped ----
// C3: Execute no-op command -- This command executes! But the circuit should be tripped!
我发现如果我HystrixCommandMetrics
在 C3 之前检查HealthMetrics
显示在滚动窗口中没有执行任何命令。
但是,如果我Thread.Sleep(2_000)
在 C3 之前添加 a ,那么指标会按照我的预期显示,并且 C3 会像我预期的那样失败,使用FailureType.SHORTCIRCUIT
.
Hystrix 中的指标不是“实时”的吗?也就是说,它们是否由单独的线程管理?如果是这种情况,也许我不应该假设断路器会立即跳闸。
作为后续,有没有办法强制指标生效?