mirror of
https://github.com/apache/activemq-artemis.git
synced 2025-02-09 19:45:29 +00:00
<html> <head> <title>ActiveMQ JMS QueueBrowser Example</title> <link rel="stylesheet" type="text/css" href="../common/common.css" /> <link rel="stylesheet" type="text/css" href="../common/prettify.css" /> <script type="text/javascript" src="../common/prettify.js"></script> </head> <body onload="prettyPrint()"> <h1>JMS QueueBrowser Example</h1> <p>This example shows you how to use a JMS <a href="http://java.sun.com/javaee/5/docs/api/javax/jms/QueueBrowser.html">QueueBrowser</a> with ActiveMQ.<br /> Queues are a standard part of JMS, please consult the JMS 1.1 specification for full details.<br /> A QueueBrowser is used to look at messages on the queue without removing them. It can scan the entire content of a queue or only messages matching a message selector.</p> <p> The example will send 2 messages on a queue, use a QueueBrowser to browse the queue (looking at the message without removing them) and finally consume the 2 messages </p> <h2>Example step-by-step</h2> <p><i>To run the example, simply type <code>mvn verify</code> from this directory</i></p> <ol> <li>First we need to get an initial context so we can look-up the JMS connection factory and destination objects from JNDI. This initial context will get it's properties from the <code>client-jndi.properties</code> file in the directory <code>../common/config</code></li> <pre class="prettyprint"> <code>InitialContext initialContext = getContext();</code> </pre> <li>We look up the JMS queue object from JNDI</li> <pre class="prettyprint"> <code>Queue queue = (Queue) initialContext.lookup("/queue/exampleQueue");</code> </pre> <li>We look up the JMS connection factory object from JNDI</li> <pre class="prettyprint"> <code>ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("/ConnectionFactory");</code> </pre> <li>We create a JMS connection</li> <pre class="prettyprint"> <code>connection = cf.createConnection();</code> </pre> <li>We create a JMS session. The session is created as non transacted and will auto acknowledge messages.</li> <pre class="prettyprint"> <code>Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);</code> </pre> <li>We create a JMS message producer on the session. This will be used to send the messages.</li> <pre class="prettyprint"> <code>MessageProducer messageProducer = session.createProducer(topic);</code> </pre> <li>We create 2 JMS text messages that we are going to send.</li> <pre class="prettyprint"> <code> TextMessage message_1 = session.createTextMessage("this is the 1st message"); TextMessage message_2 = session.createTextMessage("this is the 2nd message");</code> </pre> <li>We send messages to the queue</li> <pre class="prettyprint"> <code>messageProducer.send(message_1); messageProducer.send(message_2);</code> </pre> <li>We create a JMS QueueBrowser.<br /> We have not specified a message selector so the browser will enumerate the entire content of the queue. </li> <pre class="prettyprint"> <code>QueueBrowser browser = session.createBrowser(queue);</code> </pre> <li>We browse the queue and display all the messages' text </li> <pre class="prettyprint"> <code>Enumeration messageEnum = browser.getEnumeration(); while (messageEnum.hasMoreElements()) { TextMessage message = (TextMessage)messageEnum.nextElement(); System.out.println("Browsing: " + message.getText()); }</code> </pre> <li>We close the browser once we have finished to use it</li> <pre class="prettyprint"> <code>browser.close();</code> </pre> <p>The messages were browsed but they were not removed from the queue. We will now consume them.</p> <li>We create a JMS Message Consumer to receive the messages.</li> <pre class="prettyprint"> <code>MessageConsumer messageConsumer = session.createConsumer(queue);</code> </pre> <li>We start the connection. In order for delivery to occur on any consumers or subscribers on a connection, the connection must be started</li> <pre class="prettyprint"> <code>connection.start();</code> </pre> <li>The 2 messages arrive at the consumer</li> <pre class="prettyprint"> <code>TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000); System.out.println("Received message: " + messageReceived.getText()); messageReceived = (TextMessage)messageConsumer.receive(5000); System.out.println("Received message: " + messageReceived.getText());</code> </pre> <li>And finally, <b>always</b> remember to close your JMS connections and resources after use, in a <code>finally</code> block. Closing a JMS connection will automatically close all of its sessions, consumers, producer and browser objects</li> <pre class="prettyprint"> <code>finally { if (initialContext != null) { initialContext.close(); } if (connection != null) { connection.close(); } }</code> </pre> </ol> </body> </html>