模块集群和JMS

时间:2010-08-17 10:13:47

标签: java jms cluster-computing publish-subscribe

我有一个模块,它在JVM(无容器)中独立运行,并通过JMS与其他模块通信。 我的模块既是一个队列中的生产者,又是另一个队列中的消费者。 然后我需要集群这个模块,既出于HA的原因又出于工作负载的原因,我可能会选择使用Terracotta + Hibernate来集群我的实体。 目前,当我的应用程序启动时,它会启动一个用作消费者的线程(通过Executors.newSingleThreadExecutor())(如果相关且必要,我可以附加实际代码示例)。

我在阅读问题时理解的是,如果我只是在N JVMs上启动我的模块,那么N将创建队列中的每条消息都将到达N个订阅者。 我想做的只是其中一个(让我们当前说哪个不重要)处理该消息,因此实际上使我能够一次处理N个消息。

如何/应该如何做?我离开赛道了吗?

BTW,我使用OpenMQ作为我的实现,但我不知道这是否相关。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

群集环境中的消息处理的典型案例。这就是我要做的。

使用广播消息(基于频道)代替队列。队列对点对点通信有用并不是很有效。设置消息的有效性,直到其中一个消费者消耗它为止。这样,其他消费者甚至看不到消息,只有一个消费者会消费它。

答案 1 :(得分:0)

看看JGroups。您可以考虑实现模块/订阅者以使用jgroup来进行所需的同步。 JGroups提供可靠的多播通信。