Preciso gerenciar as mensagens na minha fila do MQ do WebSphere. Contar mensagens na fila, removê-las, encontrar uma mensagen especifica e etc. Alguém sabe como fazê-lo? Procurei na internet mas achei um único exemplo (que não funciona) :? para WebSphere e alguns outros exemplos para JBoss (que não é meu caso) :(
No começo quanto tive que implentar sistema de filas com MQ, foi um pouco difícil, mais depois acostuma.
Na pasta do MQ Client para Windows tem vários exemplos de implementação em dot.net, cobol, java, c.
Segue abaixo o exemplo em java:
import com.ibm.mq.MQException;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
import com.ibm.mq.constants.MQConstants;
/**
* Simple example program
*/
public class MQSample {
// code identifier
static final String sccsid = "@(#) samples/wmqjava/MQSample.java, jmscc.samples, k000, k000-L080311.1 1.4 08/03/10 15:04:15";
// define the name of the QueueManager
private static final String qManager = "my_queue_manager";
// and define the name of the Queue
private static final String qName = "SYSTEM.DEFAULT.LOCAL.QUEUE";
/**
* Main entry point
*
* @param args - command line arguments (ignored)
*/
public static void main(String args[]) {
try {
// Create a connection to the QueueManager
System.out.println("Connecting to queue manager: " + qManager);
MQQueueManager qMgr = new MQQueueManager(qManager);
// Set up the options on the queue we wish to open
int openOptions = MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT;
// Now specify the queue that we wish to open and the open options
System.out.println("Accessing queue: " + qName);
MQQueue queue = qMgr.accessQueue(qName, openOptions);
// Define a simple WebSphere MQ Message ...
MQMessage msg = new MQMessage();
// ... and write some text in UTF8 format
msg.writeUTF("Hello, World!");
// Specify the default put message options
MQPutMessageOptions pmo = new MQPutMessageOptions();
// Put the message to the queue
System.out.println("Sending a message...");
queue.put(msg, pmo);
// Now get the message back again. First define a WebSphere MQ
// message
// to receive the data
MQMessage rcvMessage = new MQMessage();
// Specify default get message options
MQGetMessageOptions gmo = new MQGetMessageOptions();
// Get the message off the queue.
System.out.println("...and getting the message back again");
queue.get(rcvMessage, gmo);
// And display the message text...
String msgText = rcvMessage.readUTF();
System.out.println("The message is: " + msgText);
// Close the queue
System.out.println("Closing the queue");
queue.close();
// Disconnect from the QueueManager
System.out.println("Disconnecting from the Queue Manager");
qMgr.disconnect();
System.out.println("Done!");
}
catch (MQException ex) {
System.out.println("A WebSphere MQ Error occured : Completion Code " + ex.completionCode
+ " Reason Code " + ex.reasonCode);
}
catch (java.io.IOException ex) {
System.out.println("An IOException occured whilst writing to the message buffer: " + ex);
}
}
}
while(filaMsg.getCurrentDepth() > 0)
{
MQMessage mensagemFilaTeste = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
filaMsg.get(mensagemFilaTeste, gmo);
//com esse .readLine() eu consigo o corpo da msg... essa msg é uma string....
System.out.println(mensagemFilaTeste.readLine());
System.out.println("************************");
}[/code]
agora eu preciso saber como eu pego a chave de identificação da msg… no meu caso ela deveria vir como uma string em um formato que eu tenho o lay-out para desmontar essa msg… já testei o:
mensagemFilaTeste.messageId;
e
mensagemFilaTeste.correlationId
que eu achei na documentação disponível no site da IBM para usar o MQ com java… mas ainda não consegui obter o resultado que eu preciso…
na documentação que eu recebi do servidor que envia a fila para o meu servidor diz que toda msg vem com essa chave de identificação… só não estou conseguindo achar no formato de uma string…