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

时间:2011-05-10 21:06:04

标签: jdbc distributed apache-camel

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

如果读者失败,我希望其他读者接管。

如何使用开箱即用的Camel组件实现这一目标?有可能吗?

1 个答案:

答案 0 :(得分:2)

这取决于您的部署架构。例如,如果您在ServiceMix(或ActiveMQ)上以主/从配置(对于HA)部署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();
}