我想知道是否可以使用任何JMS代理进行以下操作。
我们有N个以群集模式运行的服务实例。每个实例都有一个JMS持久订阅者,它处理来自主题的业务事件。
问题是:是否可以配置这些订阅者,因此只有其中一个订阅者会收到一个事件? (基本上,持久订阅者组的行为就像他们从队列中消费一样)。
我知道这可以通过队列实现,但我们有许多不同的服务(所有群集)都可以监听多个业务事件。
答案 0 :(得分:1)
我的问题的答案是JMS2,因为它有一个名为共享持久订阅的新功能,允许在多个JVM之间共享持久订阅。
What's new in JMS2中的更多信息(搜索共享持久订阅)。
答案 1 :(得分:0)
如果这有帮助......
对于我们的项目,这是一个具有节点的集群环境(N1,N2,N3),我们希望特定的JMS消息应该由特定的MDB队列(在您的情况下是订阅者)提供服务,我们做了以下内容: p>
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上的消息。
答案 2 :(得分:0)
我很好,你提到在多个节点上运行的同一个应用程序的多个实例,那些instanced会与同一个代理通信吗?如果是,则所有实例可以共享相同的JMS队列以处理业务事件。在这种情况下,不需要大量队列。您可以为应用程序的所有实例创建一个队列。你觉得这种方法有什么问题吗?
此时,没有代理实现提供您正在寻找的行为。