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

时间:2014-03-26 21:36:27

标签: java ibm-mq

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

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

            }

我在计时器的每次调用结束时关闭了与队列的连接,但似乎打开了太多的通道连接,然后它重载了它。所以,我想知道如何管理它?

1 个答案:

答案 0 :(得分:0)

你的try / catch逻辑在哪里?你的disconnect()是正确的,但put()或closr()抛出异常而你的disconnect()没有被执行。