我正在研究一个大约有100个主题的设计。创建会话,主题,消息使用者以及将消息监听器连接到消费者似乎消耗了大量资源。有没有更好的办法?例如,我可以重用我的会话,还是每次都必须创建它?或者我应该使用另一种范式?
这是被称为至少一百次的逻辑:
session = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
final Topic destination = session.createTopic(topicName);
final MessageConsumer consumer = session.createConsumer(destination, selector);
consumer.setMessageListener(listener);
答案 0 :(得分:1)
JMS会话不是线程安全的,因此您必须为每个订阅创建一个新的会话。一些像ActiveMQ这样的JMS实现支持虚拟主题,其中订阅可以发起到多个主题。这可能会解决您的问题。请参阅http://activemq.apache.org/virtual-destinations.html。
答案 1 :(得分:0)
对于相同的队列,可以并且应该重用相同的使用者会话。所以你最多会有100个会话。
另一种解决方案可能涉及JMS服务器上具有选择器的一些桥接器。您可以将jms配置为将100个主题转发到一个或多个队列,然后从该队列中使用。但如果您的消息类型在这些主题中完全不同,则可能很难实现。
希望有所帮助