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:
importcom.ibm.mq.MQException;importcom.ibm.mq.MQGetMessageOptions;importcom.ibm.mq.MQMessage;importcom.ibm.mq.MQPutMessageOptions;importcom.ibm.mq.MQQueue;importcom.ibm.mq.MQQueueManager;importcom.ibm.mq.constants.MQConstants;/** * Simple example program */publicclassMQSample{// code identifierstaticfinalStringsccsid="@(#) samples/wmqjava/MQSample.java, jmscc.samples, k000, k000-L080311.1 1.4 08/03/10 15:04:15";// define the name of the QueueManagerprivatestaticfinalStringqManager="my_queue_manager";// and define the name of the QueueprivatestaticfinalStringqName="SYSTEM.DEFAULT.LOCAL.QUEUE";/** * Main entry point * * @param args - command line arguments (ignored) */publicstaticvoidmain(Stringargs[]){try{// Create a connection to the QueueManagerSystem.out.println("Connecting to queue manager: "+qManager);MQQueueManagerqMgr=newMQQueueManager(qManager);// Set up the options on the queue we wish to openintopenOptions=MQConstants.MQOO_INPUT_AS_Q_DEF|MQConstants.MQOO_OUTPUT;// Now specify the queue that we wish to open and the open optionsSystem.out.println("Accessing queue: "+qName);MQQueuequeue=qMgr.accessQueue(qName,openOptions);// Define a simple WebSphere MQ Message ...MQMessagemsg=newMQMessage();// ... and write some text in UTF8 formatmsg.writeUTF("Hello, World!");// Specify the default put message optionsMQPutMessageOptionspmo=newMQPutMessageOptions();// Put the message to the queueSystem.out.println("Sending a message...");queue.put(msg,pmo);// Now get the message back again. First define a WebSphere MQ// message// to receive the dataMQMessagercvMessage=newMQMessage();// Specify default get message optionsMQGetMessageOptionsgmo=newMQGetMessageOptions();// Get the message off the queue.System.out.println("...and getting the message back again");queue.get(rcvMessage,gmo);// And display the message text...StringmsgText=rcvMessage.readUTF();System.out.println("The message is: "+msgText);// Close the queueSystem.out.println("Closing the queue");queue.close();// Disconnect from the QueueManagerSystem.out.println("Disconnecting from the Queue Manager");qMgr.disconnect();System.out.println("Done!");}catch(MQExceptionex){System.out.println("A WebSphere MQ Error occured : Completion Code "+ex.completionCode+" Reason Code "+ex.reasonCode);}catch(java.io.IOExceptionex){System.out.println("An IOException occured whilst writing to the message buffer: "+ex);}}}
F
fbardi
preciso mto saber como consigo o número de msg que está em uma determinada fila!!!
A
Alexandre_Mateus
Brother, tudo mastigado…
publicclassManangerQueueWebMain{privateQueueConnectionFactoryqueueConnectionFactory=null;privateQueueConnectionqueueConnection=null;privateQueuequeue=null;privateQueueSenderqueueSender=null;privateQueueSessionqueueSession=null;privateStringconnectionFactoryName=null;privateStringqueueName=null;privateQueueReceiverreceiver=null;/** * Envia a mensagem para a fila * @param final String asyncXml * @see createContextMessage() * * */publicbooleansendToQueue(finalStringasyncXml)throwsMQException{TextMessagemsg=null;booleanmsgSend=false;try{/* Cria o contexto para o envio da mensagem */this.createContextMessage();/* Prepara a mensagem para ser enviada como BytesMessage */msg=queueSession.createTextMessage();msg.setText(asyncXml);if(findMessage(msg)==null){queueSender.send(msg);System.out.println("Mensagem enviada!");}else{System.err.println("Mensagem nao enviada! Ja existe na fila!:"+asyncXml);}}catch(JMSExceptione){thrownewcom.ford.nfe.exception.MQException(e);}catch(NamingExceptione){thrownewcom.ford.nfe.exception.MQException(e);}catch(Exceptione){System.out.println(""+e);}finally{if(queueSession!=null){try{queueSession.close();}catch(JMSExceptione1){thrownewMQException(e1);}}if(queueConnection!=null){try{queueConnection.close();}catch(JMSExceptione1){thrownewMQException(e1);}}}returnmsgSend;}privatevoidcreateContextMessage()throwsNamingException,JMSException{Contextctx=newInitialContext();queueConnectionFactory=(QueueConnectionFactory)PortableRemoteObject.narrow(ctx.lookup(connectionFactoryName),QueueConnectionFactory.class);queueConnection=queueConnectionFactory.createQueueConnection();this.connectionFactoryName="jms/QueueConnectionFactory";this.queueName="jms/MFQueue";booleantransacted=false;queueSession=queueConnection.createQueueSession(transacted,QueueSession.AUTO_ACKNOWLEDGE);queue=(Queue)PortableRemoteObject.narrow(ctx.lookup(queueName),Queue.class);queueSender=queueSession.createSender(queue);receiver=queueSession.createReceiver(queue);queueConnection.start();}privateTextMessagefindMessage(TextMessagemessage){TextMessagemsgFound=null;try{QueueBrowserbrowser=queueSession.createBrowser((Queue)queueSender.getDestination());Enumerationenumeration=browser.getEnumeration();while(enumeration.hasMoreElements()){TextMessagemessageOnQueue=(TextMessage)enumeration.nextElement();if(messageOnQueue.getText().equals(message.getText())){msgFound=messageOnQueue;break;}}}catch(JMSExceptione){/* * Exceção ignorada para não comprometer * a inclusão de mensagens na fila */}returnmsgFound;}privatevoidremoveMessageFromQueue(TextMessagetextMessage)throwsQueueException{try{if(textMessage==null){receiver=queueSession.createReceiver(queue);}else{textMessage=findMessage(textMessage);receiver=queueSession.createReceiver(queue,"JMSMessageID='"+textMessage.getJMSMessageID()+"'");}while(receiver.receiveNoWait()!=null){receiver.receiveNoWait();}}catch(JMSExceptione){System.err.println("Erro ao tentar remover os itens da fila."+e);thrownewQueueException("Erro ao tentar remover os itens da fila."+e,e);}}publicvoidremoveMessageFromQueue(Stringmessage)throwsQueueException{try{this.createContextMessage();TextMessagemsg=null;if(message!=null){msg=queueSession.createTextMessage();msg.setText(message);}removeMessageFromQueue(msg);}catch(JMSExceptione){System.err.println("Erro ao tentar remover os itens da fila."+e);thrownewQueueException("Erro ao tentar remover os itens da fila."+e,e);}catch(NamingExceptione){System.err.println("Erro ao inicializar context na remoção das mensagens da fila: "+e);thrownewQueueException("Erro ao inicializar context na remoção das mensagens da fila: "+e,e);}}publicCollection<TextMessage>listMessage(Stringmessage)throwsQueueException{List<TextMessage>listaMensagens=newArrayList<TextMessage>();TextMessagemsg=null;try{this.createContextMessage();if(message!=null){msg=queueSession.createTextMessage(message);}else{msg=queueSession.createTextMessage();}QueueBrowserbrowser=queueSession.createBrowser((Queue)queueSender.getDestination());Enumerationenumeration=browser.getEnumeration();while(enumeration.hasMoreElements()){try{TextMessagemessageOnQueue=(TextMessage)enumeration.nextElement();if(message==null||message.equals("")){listaMensagens.add((TextMessage)enumeration.nextElement());}elseif(messageOnQueue.getText().indexOf(msg.getText())>-1){listaMensagens.add((TextMessage)enumeration.nextElement());}}catch(NoSuchElementExceptione){/* * Exceção que pode ser disparada caso a mensagem seja * processada e retirada da fila antes do término da iteração da lista. * Exceção será ignorada para que a iteração nas * mensagens possa prosseguir */}}}catch(JMSExceptione){System.err.println("Erro ao listar mensagens na da fila: "+e);thrownewQueueException("Erro ao listar mensagens na da fila: "+e,e);}catch(NamingExceptione){System.err.println("Erro ao inicializar context na listagem das mensagens da fila: "+e);thrownewQueueException("Erro ao inicializar context na listagem das mensagens da fila: "+e,e);}returnlistaMensagens;}}
preciso de uma nova ajuda com as mensagens da fila do MQ... preciso saber como pegar a idendificação da msg!!!
para pegar a mensagem está ok... algo assim:
gerenciadorFilas=newMQQueueManager(qManager);intopenOptions=MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE;MQQueuefilaMsg=gerenciadorFilas.accessQueue("TESTE",openOptions);while(filaMsg.getCurrentDepth()>0){MQMessagemensagemFilaTeste=newMQMessage();MQGetMessageOptionsgmo=newMQGetMessageOptions();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("************************");}
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...
se alguém puder ajudar... valeu!!!
A
Alexandre_Mateus
Veja o método findMessage(TextMessage message) no exemplo que enviei