我正在尝试实现断路器模式作为一种学习经验(我知道这个模式已经在多个框架中实现)。
我的简单的、非线程安全的实现看起来像这样
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%线程安全的开源框架。但也许尝试实现这一点是没有意义的。
这个问题更多的是关于线程安全,而不是关于断路器。
发布于 2012-11-18 23:07:54
如果我没理解错的话,isOpen方法访问的是一个共享变量,大概是一个boolean。您所需要做的就是生成布尔型volatile。这将确保健康检查线程对它的任何写操作对所有资源获取线程都是立即可见的。
https://stackoverflow.com/questions/13441300
复制相似问题