gpt4 book ai didi

java - 消息监听器中的 JMS 连接池

转载 作者:行者123 更新时间:2023-12-01 12:13:27 27 4
gpt4 key购买 nike

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

流程处于异步模式,我们使用 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 库实现的。

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

谢谢。

最佳答案

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

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

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

关于java - 消息监听器中的 JMS 连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27140595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com