2

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

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

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

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

4

3 回答 3

1

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

JMS2 中的新增功能(搜索共享持久订阅)中的更多信息。

于 2014-10-24T22:26:12.760 回答
0

如果这有帮助...

对于我们的项目,它是一个集群环境,节点说 (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 上侦听消息。

于 2012-08-13T12:38:13.440 回答
0

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

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

于 2012-08-29T03:54:51.830 回答