Java 如何正确关闭与MQ Manager的连接?
我制作了一个Java应用程序来连接到MQ队列并发送消息。它使用计时器多次调用该函数,因此当另一个队列中记录了消息时,获取该消息并将其发送给另一个队列Java 如何正确关闭与MQ Manager的连接?,java,ibm-mq,Java,Ibm Mq,我制作了一个Java应用程序来连接到MQ队列并发送消息。它使用计时器多次调用该函数,因此当另一个队列中记录了消息时,获取该消息并将其发送给另一个队列 mensajeHost = dataqueue.read(Constantes.CRITERIO_LECTURA_DQ,Constantes.DQGET_TIEMPO_MAXIMO, "GE"); if (mensajeHost != null) { comando
mensajeHost = dataqueue.read(Constantes.CRITERIO_LECTURA_DQ,Constantes.DQGET_TIEMPO_MAXIMO, "GE");
if (mensajeHost != null) {
comando = mensajeHost.getString();
key = comando.substring(Constantes.S_IND_KEY_ENT_EE, Constantes.E_IND_KEY_ENT_EE);
qmgr = comando.substring(Constantes.S_IND_QMGR_ENT_EE, Constantes.E_IND_QMGR_ENT_EE);
qr = comando.substring(Constantes.S_IND_QR_ENT_EE, Constantes.E_IND_QR_ENT_EE);
ql = comando.substring(Constantes.S_IND_QL_ENT_EE, Constantes.E_IND_QL_ENT_EE);
codigo = comando.substring(Constantes.S_IND_CODIGO_ENT_EE, Constantes.E_IND_CODIGO_ENT_EE);
mensaje2 = comando.substring(Constantes.S_IND_MENSAJE_ENT_EE, Constantes.E_IND_MENSAJE_ENT_EE);
mensaje2 = mensaje2.trim();
timeout = comando.substring(Constantes.S_IND_TIMEOUT_ENT_EE, Constantes.E_IND_TIMEOUT_ENT_EE);
dest = func.obtenerPorKey(destinos, Constantes.KEY_COLA_REQ + codigo); //Obteniendo par de colas necesarias!!
if(dest == null)
throw new Exception(Constantes.DEST_ERROR);
salida = manager.accessQueue(dest.getQueue(), MQC.MQOO_OUTPUT); //Seteando cola de response!!
mensaje.writeBytes(mensaje2);
mensaje.messageId = mensajeHost.getKeyString().getBytes();
mensaje.correlationId = mensajeHost.getKeyString().getBytes();
mensaje.format = MQC.MQFMT_STRING;
salida.put(mensaje);
salida.close();
manager.disconnect();
}
我在每次调用计时器结束时关闭与队列的连接,但似乎打开了太多通道连接,然后导致其过载。所以,我想知道如何处理这个问题?您的尝试/捕获逻辑在哪里?您的disconnect()是正确的,但是put()或closr()引发了一个异常,并且您的disconnect()没有被执行。我没有把它放在代码中,因为它太长了,但实际上有一个try/catch打印在登录异常中,而这并没有发生。最后放入您的disconnect()。