目前我正在开发一个连接到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
如何处理它们被分配的连接。
谢谢。
答案 0 :(得分:1)
这里的关键对象是会话而不是连接;会话将在这里进行主要工作,消息消耗(异步或其他)。
建议尝试尽可能广泛地分享连接。临时目标在连接级别上作用域。所以使用汇集是一个好主意;完全可以分享这种联系。
但是我也会说考虑汇集会议可能值得考虑。使用此处的代码,每次通过该代码都将创建一个新会话,这意味着将创建与WebSphere MQ队列管理器的新连接。目前尚不清楚它的范围是什么,但如果关闭很快就会成为瓶颈。