【发布时间】:2014-02-28 20:10:16
【问题描述】:
作为一名开发人员,我需要一个 JMS 集群,以便只有一个节点处理一个任务(任务意味着队列消息),并且当一个节点出现故障时,另一个节点可以处理任务。
假设:
- JMS 队列在集群节点上复制
- 任务只处理一次(在一个节点,没有分布式队列)
- 即使某些节点被关闭,任务也会持续处理
- 应用程序可以在单个节点上运行而无需更改代码或重新编译
目前的应用技术栈:
基于 Spring 3.2.X 和嵌入式 ActiveMQ 代理的 Web 应用程序在应用程序初始化()期间没有持久性。只有这个应用程序使用创建的代理。在 JBoss 5.0.1 上运行的应用程序。
现在我必须决定我们将使用哪种方法进行上述故障转移集群。我正在考虑切换到 JBoss 消息传递(由该版本的 JBoss 提供),但我注意到这个实现很旧并且有很多错误。
目前我在以下可能性之间犹豫:
- 在作为集群连接的两个 JBoss 节点 (http://activemq.apache.org/integrating-apache-activemq-with-jboss.html) 上嵌入 ActiveMQ
- 只在没有集成的情况下将 ActiveMQ 部署到 JBoss(我注意到 ActiveMQ 5.9 启动时没有在上面的 activemq-jms-ds.xml 链接中提到的集成,我可以直接连接到 JMS,而无需在 Spring 中定义连接工厂和 JNDI)。我说的对吗?
- 两个嵌入式代理从两个节点上的 Spring 应用程序开始并作为集群连接 (?) 可能吗?
- 单独启动两台ActiveMQ服务器连接成集群(较新版本的ActiveMQ不需要容器,可以单独运行)
以上哪个可能是最好的?我应该换一种方式吗?
JMS 集群对我来说相对较新,所以欢迎所有 cmets / 评论。
【问题讨论】:
-
这个问题与 Spring 没有真正的关系,因为它很乐意连接到您放置的任何 JMS 代理基础设施。 JMS 集群由商业成熟的应用服务器提供。在开源世界中,我会关注 HornetQ。
-
嗨 Stephane,请查看所选的解决方案...
标签: jboss jms activemq jboss5.x spring-jms