【问题标题】:Clustering JMS with Spring使用 Spring 对 JMS 进行集群
【发布时间】: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


【解决方案1】:

我决定使用在两台服务器上配置的外部 ActiveMQ 作为故障转移集群(客户端通过 ActiveMQ 提供的故障转移协议进行连接)。 ActiveMQ 部署到 JBoss 服务器。

我还尝试在配置为故障转移集群的 Spring 中运行嵌入式 ActiveMQ,但我遇到了一个普遍问题:在故障转移配置中,一个 ActiveMQ 代理正在等待锁定文件/数据库,这种情况会暂停 Spring 上下文的初始化——即我不能使用这种方法的原因(第二个节点的应用程序应该可以工作)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2011-08-22
    • 1970-01-01
    • 2011-10-25
    • 2020-10-20
    相关资源
    最近更新 更多