Java 如何正确关闭与MQ Manager的连接?

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

我制作了一个Java应用程序来连接到MQ队列并发送消息。它使用计时器多次调用该函数,因此当另一个队列中记录了消息时,获取该消息并将其发送给另一个队列

            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()。