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