是否有更有效的方法为JMS创建大量的消息使用者?

时间:2016-07-02 11:54:25

标签: java architecture jms messaging

我正在研究一个大约有100个主题的设计。创建会话,主题,消息使用者以及将消息监听器连接到消费者似乎消耗了大量资源。有没有更好的办法?例如,我可以重用我的会话,还是每次都必须创建它?或者我应该使用另一种范式?

这是被称为至少一百次的逻辑:

        session = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        final Topic destination = session.createTopic(topicName);
        final MessageConsumer consumer = session.createConsumer(destination, selector);
        consumer.setMessageListener(listener);

2 个答案:

答案 0 :(得分:1)

JMS会话不是线程安全的,因此您必须为每个订阅创建一个新的会话。一些像ActiveMQ这样的JMS实现支持虚拟主题,其中订阅可以发起到多个主题。这可能会解决您的问题。请参阅http://activemq.apache.org/virtual-destinations.html

答案 1 :(得分:0)

对于相同的队列,可以并且应该重用相同的使用者会话。所以你最多会有100个会话。

另一种解决方案可能涉及JMS服务器上具有选择器的一些桥接器。您可以将jms配置为将100个主题转发到一个或多个队列,然后从该队列中使用。但如果您的消息类型在这些主题中完全不同,则可能很难实现。

希望有所帮助