JMS performance
Estou tendo um pouco de dificuldade para entender o JMS de uma perspectiva de desempenho. Temos este código muito simples em nosso aplicativo:
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);
}
O código está correto, mas provavelmente alguns dos artefatos acima podem ser reutilizados para várias mensagens. Estas são as nossas configurações:
Usamos o Oracle Weblogic 10.3.3 @Weblogic se conecta ao IBM MQ 7.0 (o problema também aparece com 6.0) para JMS A lógica acima é executada por um único thread em um servidor back-end. Seria simples manter alguns objetosQueueConnection
, QueueSession
, QueueSender
) na memória, pois não há simultaneidade envolvidMinhas perguntaQue tipos de objetos podem ser compartilhados entre várias mensagens? (é claro que incluiríamos a recuperação de erros, a restauração desses objetos compartilhados) Quais são as práticas recomendadas para melhorar o desempenho?