【发布时间】:2012-08-09 16:23:04
【问题描述】:
我想知道是否可以使用任何 JMS 代理进行以下操作。
我们有 N 个以集群模式运行的服务实例。每个实例都有一个 JMS 持久订阅者,用于处理来自主题的业务事件。
问题是:是否可以将这些订阅者配置为只有其中一个会收到事件? (基本上,这组持久订阅者的行为就像他们正在从队列中消费一样)。
我知道队列可以做到这一点,但我们有许多不同的服务(全部是集群的)监听多个业务事件。
【问题讨论】:
我想知道是否可以使用任何 JMS 代理进行以下操作。
我们有 N 个以集群模式运行的服务实例。每个实例都有一个 JMS 持久订阅者,用于处理来自主题的业务事件。
问题是:是否可以将这些订阅者配置为只有其中一个会收到事件? (基本上,这组持久订阅者的行为就像他们正在从队列中消费一样)。
我知道队列可以做到这一点,但我们有许多不同的服务(全部是集群的)监听多个业务事件。
【问题讨论】:
我的问题的答案是 JMS2,因为它有一个名为共享持久订阅的新功能,允许在多个 JVM 之间共享持久订阅。
What's new in JMS2 中的更多信息(搜索共享持久订阅)。
【讨论】:
我是古玩,你提到同一个应用程序的多个实例在多个节点上运行,这些实例将与同一个代理进行通信,对吗?如果是这样,所有实例都可以共享同一个 JMS 队列来处理业务事件。在这种情况下,不需要大量的队列。您可以为应用程序的所有实例设置一个队列。您认为这种方法有什么问题吗?
目前,没有任何代理实现提供您正在寻找的行为。
【讨论】:
如果这有帮助...
对于我们的项目,它是一个集群环境,节点为 (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 上侦听消息。
【讨论】: