我用的是Hystrix(1.5.18),设置参数ErrorThresholdPercentage=30,marksuccess时的断路状态切换总是
I use Hystrix(1.5.18) ,and set param ErrorThresholdPercentage=30,the circuitbreak status switch when marksuccess always
我用hystrix(1.5.18)设置ErrorThresholdPercentage
等于30,当错误百分比超过阈值时,circuitBreak
打开。
但是,当提前请求return成功时,它会调用marksuccess
方法来设置circuitBreak
false。
circuitBreak
状态的切换就像循环一样。
这是 hystrix 中的错误吗?
.withCircuitBreakerErrorThresholdPercentage(30)
.withCircuitBreakerSleepWindowInMilliseconds(2000)
我预计消费者会在 2000 毫秒后尝试请求,但不会在一个提前请求 return 成功后不久
可能你误解了属性circuitBreaker.sleepWindowInMilliseconds
的意思。
如果电路打开,您的所有请求都将在 sleepWindowInMilliseconds
期间被拒绝 。 sleepWindowInMilliseconds
毫秒后,将变为 half-open
状态。在这种状态下,只允许一个请求,如果成功,电路将再次关闭。
我猜你看到的情况是你的请求在half-open
状态下成功并且关闭了电路。
官方wiki中的下图可以帮助您理解。
我用hystrix(1.5.18)设置ErrorThresholdPercentage
等于30,当错误百分比超过阈值时,circuitBreak
打开。
但是,当提前请求return成功时,它会调用marksuccess
方法来设置circuitBreak
false。
circuitBreak
状态的切换就像循环一样。
这是 hystrix 中的错误吗?
.withCircuitBreakerErrorThresholdPercentage(30)
.withCircuitBreakerSleepWindowInMilliseconds(2000)
我预计消费者会在 2000 毫秒后尝试请求,但不会在一个提前请求 return 成功后不久
可能你误解了属性circuitBreaker.sleepWindowInMilliseconds
的意思。
如果电路打开,您的所有请求都将在 sleepWindowInMilliseconds
期间被拒绝 。 sleepWindowInMilliseconds
毫秒后,将变为 half-open
状态。在这种状态下,只允许一个请求,如果成功,电路将再次关闭。
我猜你看到的情况是你的请求在half-open
状态下成功并且关闭了电路。
官方wiki中的下图可以帮助您理解。