0

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

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

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

每个连接都应该有唯一的客户端 ID 和订阅名称。

关闭连接后,我尝试使用新创建的连接的 hashCode 再次访问相同的订阅,这种方法会起作用吗?或者我是否需要指定订阅名称,如 SUBSCRIBER1、SUBSCRIBER3、SUBSCRIBER2 ..

4

1 回答 1

0

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

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

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

于 2013-04-25T22:28:37.490 回答