Java:跨多个服务器同步线程

时间:2009-04-03 21:18:52

标签: java multithreading synchronization jms distributed

我遇到一个问题,我需要为Windows上的Java服务跨多个不同服务器同步多个线程的处理。

在这个应用程序中,我在同一个JMS队列中有多个消费者线程拉取消息。消息以3或4组的形式出现,我需要确保每个组中的消息都是完全串行处理的。我需要某种同步机制来确保thread1是否关闭了一个消息,然后thread2从该组中提取下一条消息,thread2在开始处理它的消息之前等待thread1完成处理。

有关线程分布式同步机制的任何建议吗?任何类型的解决方案都会很好(JMS解决方案,分布式缓存等)

注意:我们使用的JMS提供程序是ActiveMQ。

3 个答案:

答案 0 :(得分:7)

ActiveMQ支持message groups,完全应该是你需要的。

答案 1 :(得分:7)

您可能需要考虑使用Hazelcast分布式锁。超级精简,轻松开源。

java.util.concurrent.locks.Lock lock = Hazelcast.getLock ("mymonitor");
lock.lock ();
try {
// do your stuff
}finally {
   lock.unlock();
}

此致

-talip

Hazelcast - 开源分布式队列,地图,设置,列表,锁定

答案 2 :(得分:1)

邮件标题中是否有类似组ID的内容?如果是这样,消费者可以创建Selector来按顺序处理该组。

可以通过散列组标识符来完成将组分配给特定的消费者,或者他们可以使用一些共识协议(如Paxos或虚拟同步)(通过单独的队列发送消息)主动协调彼此。