0

サーキット ブレーカー パターンを学習体験として実装しようとしています (このパターンは既に複数のフレームワークで実装されていることを知っています)。

私の素朴で単純化された、スレッドセーフではない実装は次のようになります

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% スレッド セーフと思われるオープン ソース フレームワークは見つかりませんでした。しかし、それを達成しようとしても意味がないのかもしれません。

この質問は、サーキット ブレーカーよりもスレッド セーフに関するものです。

4

1 に答える 1

0

私の理解が正しければ、isOpenメソッドは共有変数、おそらくboolean. 必要なのは、それを boolean にすることだけですvolatile。これにより、ヘルスチェック スレッドによる書き込みが、リソースを取得するすべてのスレッドにすぐに表示されるようになります。

于 2012-11-18T15:07:54.260 に答える