我試圖實現斷路器模式作爲一種學習經驗(我知道這種模式已經在多個框架中實現)。螺紋安全斷路器
我的幼稚,簡化,不是線程安全的實現看起來像
CircuitBreaker circuitBreaker = null;
try {
//get the current circuit breaker
if (circuitBreaker.isOpen()) {
throw new CircuitBreakerOpenException();
} else {
//proceed normally
//or retry if half open
}
} catch (CircuitBreakerCallbackExecutionException e) {
//update or replace the circuit breaker
}
我怎樣才能讓一個線程安全的實現,而不需要通過調用守衛(斷路器對象)同步?理想情況下,如果失敗閾值設置爲10,如果遠程系統發生故障,我不希望允許超過10個多線程呼叫通過警衛。
到目前爲止,我還沒有找到任何似乎100%線程安全的開源框架。但是,嘗試實現這一點也許沒有意義。
這個問題更多的是關於線程安全而不是斷路器。
只是爲了澄清:我知道爲什麼這不是線程安全的。但我不知道的是如何使它安全。 – tbruhn
我不是很理解這個問題,或者我錯在閱讀,你是說你永遠不想要超過10個電話在任何時候活動?否則,如果在系統發生故障之前有100個呼叫通過了斷路器,那麼您將有100個活動呼叫仍在斷路器保護的代碼的「內部」,而您最多隻需要10個。 –
可以說遠程系統是一切正常。但在某些時候,所有到遠程系統的呼叫超時。我想要的是將那些得到例如TimedOutException的調用限制爲不超過10次。 – tbruhn