Examine, lea y elimine un mensaje de una cola utilizando clases de IBM MQ
Estoy escribiendo una aplicación Java simple usando clases MQ para Java con Eclipse.
Ahora mismo puedo navegar por una cola remota sin eliminar los mensajes almacenados.
Aquí está el código del ciclo de lectura:
MQQueueManager QMgr = new MQQueueManager(qManager); //<-- qManager is a String with the QMgr name
int openOptions = MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INPUT_SHARED | MQC.MQOO_BROWSE;
MQQueue queue = QMgr.accessQueue(queueName, openOptions);
MQMessage theMessage = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options=MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST;
gmo.matchOptions=MQC.MQMO_NONE;
gmo.waitInterval=5000;
boolean thereAreMessages=true;
while(thereAreMessages){
try{
//read the message
queue.get(theMessage,gmo);
//print the text
String msgText = theMessage.readString(theMessage.getMessageLength());
System.out.println("msg text: "+msgText);
// <--- Solution code Here
//move cursor to the next message
gmo.options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_NEXT;
}catch(MQException e){
if(e.reasonCode == e.MQRC_NO_MSG_AVAILABLE) {
System.out.println("no more message available or retrived");
}
thereAreMessages=false;
} catch (IOException e) {
System.out.println("ERROR: "+e.getMessage());
}
}
Pregunta principal: Después de leer la línea del mensaje y antes de mover el cursor al siguiente mensaje, ¿cómo puedo eliminar el mensaje de la cola?
Pregunta secundaria: Eclispe me advierte que todos los costants utilizados para las opciones están en desuso; ¿Cuáles son los correctos a utilizar?
Solución:
Aquí la solución que realmente estoy buscando:
// set te cursor to remove the message from the queue
gmo.options = CMQC.MQGMO_MSG_UNDER_CURSOR;
queue.get(theMessage, gmo);
Estas líneas deben insertarse en el código de la pregunta.
Lo he encontrado aquí:http://www.velocityreviews.com/forums/t124676-mq-series-messages-browse-and-delete.html