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 回答