Pages

2014-08-14

Java EE: Asynchronously receiving messages from a message queue

The JMSConsumer.receiveBody() method has a disadvantage: it blocks execution until a message is received from the queue. We can prevent our JMS consumer code from blocking execution by receiving messages asynchronously via an implementation of the javax.jms.MessageListener interface.

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class ExampleMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
   TextMessage textMessage = (TextMessage) message;
   try {
      System.out.print("Received the following message: ");
      System.out.println(textMessage.getText());
      System.out.println();
   } catch (JMSException e) {
     e.printStackTrace();
}
}
}

Our main code can now delegate message retrieval to our custom MessageListener implementation:
jMSConsumer.setMessageListener(new ExampleMessageListener());

No comments:

Post a Comment