0

目前我正在开发一个连接到 Websphere MQ 以发送和接收消息的独立 Java 应用程序。

流程处于异步模式,我们使用MessageListener类来实现,以便在消息准备好时从队列中检索消息。使用监听器初始化消费者的代码如下:

if(connection == null)
        connection = getJmsConnection();

    try {
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        if (isTopic) {
            destination = session.createTopic(destinationName);
        } else {
            destination = session.createQueue(destinationName);
        }
        consumer = session.createConsumer(destination);
        consumer.setMessageListener(listener);
    } catch (JMSException e) {
        e.printStackTrace();
    }

getJmsConnection()方法将从池中返回一个连接,使用 Apache Commons Pool 库实现。

我的问题是,只要程序正在运行,从池中分配给侦听器的连接是否会处于活动状态并绑定到该侦听器?或者连接被间歇性使用并且可以被其他进程重用?我们的想法是让发送和接收过程重用池中的连接,但我不确定如何MessageListener处理分配给它们的连接。

谢谢你。

4

1 回答 1

1

这里的关键对象是会话而不是连接;该会话将在此处使用消息消费(异步或其他方式)进行主要工作。

建议尽可能广泛地尝试和共享连接。临时目标的范围在连接级别。所以使用池化是个好主意;完全有可能分享这种联系。

但是,我还要说,可能值得考虑合并会话。使用此处的代码将创建一个新会话,每次通过该代码,这将意味着将创建一个到 WebSphere MQ 队列管理器的新连接。目前尚不清楚这将是什么范围,但如果迅速关闭它可能会成为瓶颈。

于 2014-11-26T09:21:32.530 回答