2014-03-26 52 views
0

我做了一個Java應用程序來連接到MQ隊列併發送消息。它使用定時器多次調用該函數,因此當有消息記錄在另一個隊列中時,獲取並將其發送給另一個隊列。如何正確關閉與MQ Manager的連接?

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

      } 

我收在計時器的每個調用的端部的連接到隊列,但似乎太多信道連接被打開,然後將其過載它。所以,我想知道我該如何做到這一點?

回答

0

你的try/catch邏輯在哪裏?您的disconnect()是正確的,但是put()或closr()拋出異常並且您的disconnect()未被執行。

+0

我沒有把它放在代碼中,因爲它太長了,但實際上有一個try/catch打印在一個登錄異常,並沒有發生。 – Xanathos

+1

最後放置您的disconnect()。 – Aliti