【问题标题】:Is there a more efficient way to create a large list of message consumers for JMS?有没有更有效的方法来为 JMS 创建大量消息使用者?
【发布时间】:2016-07-05 20:31:17
【问题描述】:

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

这是至少被调用一百次的逻辑:

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

【问题讨论】:

    标签: java architecture jms messaging


    【解决方案1】:

    JMS 会话不是线程安全的,因此您必须为每个订阅创建一个新会话。一些 JMS 实现(如 ActiveMQ)支持虚拟主题,其中可以启动对多个主题的订阅。这可能会解决你的问题。见http://activemq.apache.org/virtual-destinations.html

    【讨论】:

      【解决方案2】:

      对于同一个队列和同一个消费者会话可以而且应该被重用。因此,您最多将有 100 个会话。

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

      希望有帮助

      【讨论】:

        猜你喜欢
        • 2017-07-29
        • 2010-09-25
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多