JMS 性能
2022-09-02 09:56:56
我在从性能角度理解JMS时遇到了一些麻烦。我们的应用程序中有这个非常简单的代码:
QueueConnection connection = null;
QueueSession session = null;
QueueSender sender = null;
TextMessage msg = null;
try {
// The JNDIHelper uses InitialContext to look up things
QueueConnectionFactory qcf = JNDIHelper.lookupFactory();
Queue destQueue = JNDIHelper.lookupQueue();
// These objects are created for every message, which is quite slow
connection = qcf.createQueueConnection();
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
sender = session.createSender(destQueue);
// This is the actual message
msg = session.createTextMessage(xmlMsg);
sender.setTimeToLive(0);
sender.send(msg);
}
finally {
// Close all objects again
JMSUtilities.safeClose(sender);
JMSUtilities.safeClose(session);
JMSUtilities.safeClose(connection);
}
代码是正确的,但上述一些伪影可能可以重用于多条消息。以下是我们的配置:
- 我们使用 Oracle Weblogic 10.3.3
- Weblogic 连接到 JMS 的 IBM MQ 7.0(问题也出现在 6.0 中)
- 上述逻辑由后端服务器上的单个线程执行。将一些对象 (, , ) 保留在内存中会很简单,因为不涉及并发。
QueueConnection
QueueSession
QueueSender
我的问题
- 哪些类型的对象可以在多个消息之间共享?(当然,我们会包括错误恢复,恢复那些共享对象)
- 提高性能的最佳做法是什么?