这种方法会使客户端ID和;多线程环境中唯一的订阅名称工作?

时间:2013-04-25 14:55:18

标签: jms jms-topic

我正在构建一个应用程序,它将消费来自多个主题的消息,转换消息,然后将它们发布到多个主题。查找connectionfactory对象后,我正在使用此代码

Connection con = cf.createConnection();
String clientId = "APP"+ con.hashCode();
con.setClientId(clientId);

并且在创建持久订阅时我正在使用它     MessageConsumer consumer = session.CreateDurableSubscriber(topic," DurableSubscribtion" + clientId,topic.getSelector,true);

每个连接都应具有unqiue客户端ID和订阅名称。

关闭连接后,我尝试使用新创建的连接的hashCode再次访问同一个订阅,这种方法会起作用吗?或者我需要指定SUBSCRIBER1,SUBSCRIBER3,SUBSCRIBER2等子目录。

1 个答案:

答案 0 :(得分:0)

是的,您必须指定“可重复”的客户端ID,以便下次可以显示相同的客户端ID。否则,您将创建订阅的加载(可能是Integer.MAX_VALUE?),这些订阅都将完全失效。

您需要设计一个有意义的命名方案。例如,如果订阅了每个主题的订阅者,只需将客户端ID命名为< topic_name> +“durSub-Admin”或其他什么。

如果您使用的是ActiveMQ,由于VirtualTopics,这会更容易一些。