【问题标题】:Can JMS Durable Subscribers be grouped for HA?可以将 JMS 持久订阅者分组以实现高可用性吗?
【发布时间】:2012-08-09 16:23:04
【问题描述】:

我想知道是否可以使用任何 JMS 代理进行以下操作。

我们有 N 个以集群模式运行的服务实例。每个实例都有一个 JMS 持久订阅者,用于处理来自主题的业务事件。

问题是:是否可以将这些订阅者配置为只有其中一个会收到事件? (基本上,这组持久订阅者的行为就像他们正在从队列中消费一样)。

我知道队列可以做到这一点,但我们有许多不同的服务(全部是集群的)监听多个业务事件。

【问题讨论】:

    标签: java jms


    【解决方案1】:

    我的问题的答案是 JMS2,因为它有一个名为共享持久订阅的新功能,允许在多个 JVM 之间共享持久订阅。

    What's new in JMS2 中的更多信息(搜索共享持久订阅)。

    【讨论】:

    • 是的,确实 JMS 2.0 具有跨订阅者的负载平衡。
    【解决方案2】:

    我是古玩,你提到同一个应用程序的多个实例在多个节点上运行,这些实例将与同一个代理进行通信,对吗?如果是这样,所有实例都可以共享同一个 JMS 队列来处理业务事件。在这种情况下,不需要大量的队列。您可以为应用程序的所有实例设置一个队列。您认为这种方法有什么问题吗?

    目前,没有任何代理实现提供您正在寻找的行为。

    【讨论】:

      【解决方案3】:

      如果这有帮助...

      对于我们的项目,它是一个集群环境,节点为 (N1,N2,N3),我们希望特定的 JMS 消息应由特定的 MDB 队列(在您的情况下为订阅者)提供服务,我们执行了以下操作:

      A. Create two MDB queue MDB1 and MDB2.
      B. Used `MDBNotificationListenerMBean` to stop MDB1 on N2
      C. Used `MDBNotificationListenerMBean` to stop MDB2 on N1 & N3.
      

      并将消息发布到不同的队列...

      现在 MDB1 在 N1 和 N3 上可用,MDB2 只在 N2 上侦听消息。

      【讨论】:

      • 嗨,Bhrath,我想这样做的原因之一是避免在应用程序中包含任何路由逻辑。很多时候,我们有 5-7 个应用程序监听同一个业务事件,每个应用程序都有多个节点。所以你可以想象,我们有数百个队列,而且变得有点难以管理。
      猜你喜欢
      • 2013-12-17
      • 2017-11-08
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多