使用现有组件阻止apache骆驼中的消费者

问题描述:

我想使用Apache Camel JDBC组件读取Oracle表。我希望Camel能够在分布式环境中运行,以满足可用性问题。但是,我正在阅读的表与队列类似,所以我只想在任何给定时间只有一个阅读器,这样我就可以避免锁定问题(Oracle中的混乱)。使用现有组件阻止apache骆驼中的消费者

如果读者失败,我希望另一位读者接管。

您将如何使用开箱即用的Camel组件完成此操作?可能吗?

这取决于您的部署体系结构。例如,如果您在主/从配置(针对HA)在Servicemix(或ActiveMQ)上部署您的Camel应用程序,则在给定时间只有一个消费者处于活动状态...

但是,如果您需要多个运行(为了可伸缩性而集群),那么(除了您编写自己的锁定逻辑),它们将(默认情况下)从表中竞争/重复读取。

这很容易使用Hazelcast Distributed Locking。有一个camel-hazelcast组件,但它不支持锁定API。一旦你configure your apps参加Hazelcast集群,然后就就在你需要给定对象同步的任何代码锁定API ...

import com.hazelcast.core.Hazelcast; 
import java.util.concurrent.locks.Lock; 

Lock lock = Hazelcast.getLock(myLockedObject); 
lock.lock(); 
try { 
    // do something here 
} finally { 
    lock.unlock(); 
} 
+0

谢谢,我用Hazelcast创建一个共享锁,我的包裹读者与它。非常棒! – 2011-06-03 19:43:25