JMS performance

У меня проблемы с пониманием 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 подключается к IBM MQ 7.0 (проблема также появляется с 6.0) для JMS
  • Вышеупомянутая логика выполняется одним потоком на внутреннем сервере. Было бы просто сохранить некоторые объекты ( QueueConnection , QueueSession , QueueSender ) в памяти, поскольку здесь не используется параллелизм.

Мои вопросы

  • Какие типы объектов можно использовать в нескольких сообщениях? (конечно, мы бы включили восстановление после ошибок, восстановление этих общих объектов)
  • Каковы лучшие методы повышения производительности?
20
задан Lukas Eder 29 March 2011 в 12:06
поделиться