I want to read messages from IBM MQ and just print them.
//my main class
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;
import com.ibm.mq.jms.MQQueue;
import com.ibm.mq.jms.MQQueueConnection;
import com.ibm.mq.jms.MQQueueConnectionFactory;
import com.ibm.mq.jms.MQQueueSession;
import com.ibm.msg.client.wmq.WMQConstants;
public class QueueConnector {
public static void main(String[] args) throws JMSException {
MQQueueConnectionFactory qcf = new MQQueueConnectionFactory();
MQQueueConnection qc;
Queue queue;
MQQueueSession queueSession;
MessageConsumer consumer;
qcf.setHostName ("XYZ");
qcf.setPort (Integer.parseInt("abc"));
qcf.setQueueManager ("ABC");
qcf.setChannel ("IJK");
qcf.setTransportType (WMQConstants.WMQ_CM_CLIENT);
qc = (MQQueueConnection) qcf.createQueueConnection ();
queue = new MQQueue("QUEUE_NAME");
queueSession = (MQQueueSession) qc.createQueueSession (false,Session.AUTO_ACKNOWLEDGE);
consumer = queueSession.createConsumer(queue);
Listener listener = new Listener();
consumer.setMessageListener(listener);
qc.start();
}
}
// listener class
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class Listener implements MessageListener {
@Override
public void onMessage(Message message) {
// TODO Auto-generated method stub
try {
System.out.println(((TextMessage)message).getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("From Listener!");
}
}
The main class is getting terminated without calling onMessage, even if there are messages in queue. Can anyone help me with this.
You need to keep your program running. When you reach the end of main - the program will exit and hence your listener won't fire.
Try placing new Scanner(System.in).nextLine();
at the end of your method to verify that it works. Of course, you may want to change this exit condition to something more appropriate (or actually close the scanner).