サーキット ブレーカー パターンを学習体験として実装しようとしています (このパターンは既に複数のフレームワークで実装されていることを知っています)。
私の素朴で単純化された、スレッドセーフではない実装は次のようになります
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% スレッド セーフと思われるオープン ソース フレームワークは見つかりませんでした。しかし、それを達成しようとしても意味がないのかもしれません。
この質問は、サーキット ブレーカーよりもスレッド セーフに関するものです。