If we want to asynchronously consume a message, we have to create a class that implements the JMS MessageListener interface, something like:
private class MyMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
if(message instanceof TextMessage) {
try {
logger.info("Received {} ", ((TextMessage) message).getText());
} catch (JMSException e) {
logger.error("Can't extract text from received message", e);
}
}
else
logger.info("Unexpected non-text message received.");
}
}Then the consumer code changes only slightly:MessageConsumer consumer = session.createConsumer(destination);
consumer.setMessageListener(new MyMessageListener()); // 1
try{ Thread.sleep(1000); } catch(InterruptedException e) {} // 21. Associate to the consumer an instance of our listener.2. Usually we should implement a more sophisticated way of keeping alive the consumer till all the relevant messages are consumed. But for this simple example sleeping for a second should be enough.
The Java source code for the hello producer-consumer example, both in the synchronous and asynchronous flavor, is on github.
this was very useful thankyou
ReplyDeleteI'm glad to read that. Thank you.
Delete