2011-05-10 142 views
2

我想使用Apache Camel JDBC組件讀取Oracle表。我希望Camel能夠在分佈式環境中運行,以滿足可用性問題。但是,我正在閱讀的表與隊列類似,所以我只想在任何給定時間只有一個閱讀器,這樣我就可以避免鎖定問題(Oracle中的混亂)。使用現有組件阻止apache駱駝中的消費者

如果讀者失敗,我希望另一位讀者接管。

您將如何使用開箱即用的Camel組件完成此操作?可能嗎?

回答

2

這取決於您的部署體系結構。例如,如果您在主/從配置(針對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