开发者

blocking consumers in apache camel using existing components

开发者 https://www.devze.com 2023-03-05 10:21 出处:网络
I would like to use the Apache Camel JDBC component to read an Oracle t开发者_如何转开发able.I want Camel to run in a distributed environment to meet availability concerns.However, the table I am read

I would like to use the Apache Camel JDBC component to read an Oracle t开发者_如何转开发able. I want Camel to run in a distributed environment to meet availability concerns. However, the table I am reading is similar to a queue, so I only want to have a single reader at any given time so I can avoid locking issues (messy in Oracle).

If the reader goes down, I want another reader to take over.

How would you accomplish this using the out-of-the-box Camel components? Is it possible?


It depends on your deployment architecture. For example, if you deploy your Camel apps on Servicemix (or ActiveMQ) in a master/slave configuration (for HA), then only one consumer will be active at a given time...

But, if you need multiple running (clustered for scalability), then (by default) they will compete/duplicate reads from the table unless you write your own locking logic.

This is easy using Hazelcast Distributed Locking. There is a camel-hazelcast component, but it doesn't support the lock API. Once you configure your apps to participate in a Hazelcast cluster, then just just the lock API around any code that you need to synchronize for a given object...

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

精彩评论

暂无评论...
验证码 换一张
取 消