我正在构建一个应用程序,它将消费来自多个主题的消息,转换消息,然后将它们发布到多个主题。查找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等子目录。
答案 0 :(得分:0)
是的,您必须指定“可重复”的客户端ID,以便下次可以显示相同的客户端ID。否则,您将创建订阅的加载(可能是Integer.MAX_VALUE?),这些订阅都将完全失效。
您需要设计一个有意义的命名方案。例如,如果订阅了每个主题的订阅者,只需将客户端ID命名为< topic_name> +“durSub-Admin”或其他什么。
如果您使用的是ActiveMQ,由于VirtualTopics,这会更容易一些。