使用现有组件阻止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();
}
谢谢,我用Hazelcast创建一个共享锁,我的包裹读者与它。非常棒! – 2011-06-03 19:43:25