jms 2共享用户

时间:2015-12-16 16:48:02

标签: jms-topic jms2

我在应用程序中看到一些问题,即应用程序的两个实例正在接收相同的消息,即使它们的使用者是使用createSharedConsumer创建的,并且具有相同的订阅名称。

起初我认为这可能是我们的应用程序或我们使用SpringJMS的方式,所以我创建了一个创建3个连接工厂的示例应用程序。然后,这些工厂用于创建发送到主题的消息和同一应用程序中的两个侦听器(但是因为它们使用不同的连接工厂和客户端ID,这些应该是完全独立的)但是这两个连接的两个消息侦听器仍在接收消息。

我尝试对抗HornetQ和Tibco,并获得相同的结果。

消息使用者在实现MessageListener

的类中按如下方式创建
Connection connection = factory.createConnection(userName, password);
Session session = connection.createSession();
MessageConsumer topicReceiver = session.createSharedConsumer(topic, SUBSCRIPTION_NAME);
topicReceiver.setMessageListener(this);
connection.start();

有没有成功使用过JMS 2.0共享消费者的人指出了我的方向?

1 个答案:

答案 0 :(得分:0)

看起来我应该有RTFM。来自JMS 2.0规范:

共享的非持久订阅由名称指定的名称标识 客户端和客户端标识符(如果已设置)。如果设置了客户端标识符 首先创建共享的非持久订阅,然后创建一个客户端 随后希望在共享的非耐用性上创建一个消费者 订阅必须使用相同的客户端标识符。

因此,由于多个客户端不能具有相同的客户端标识符,因此如果您希望使用共享订阅(持久订阅或非持久订阅),则不应设置客户端标识符。