JMS Topic Example

This example shows you how to send and receive a message to a JMS Topic with ActiveMQ Artemis.

Topics are a standard part of JMS, please consult the JMS 1.1 specification for full details.

A Topic is used to send messages using the publish-subscribe model, from a producer to 1 or more consumers.

Example step-by-step

To run the example, simply type mvn verify -Pexample from this directory

  1. 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 client-jndi.properties file in the directory ../common/config
  2.            InitialContext initialContext = getContext();
            
  3. We look-up the JMS topic object from JNDI
  4.            Topic topic = (Topic) initialContext.lookup("/topic/exampleTopic");
            
  5. We look-up the JMS connection factory object from JNDI
  6.            ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("/ConnectionFactory");
            
  7. We create a JMS connection
  8.            connection = cf.createConnection();
            
  9. We create a JMS session. The session is created as non transacted and will auto acknowledge messages.
  10.            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            
  11. We create a JMS message producer on the session. This will be used to send the messages.
  12.           MessageProducer messageProducer = session.createProducer(topic);
           
  13. We create a JMS Message Consumer, messageConsumer1, to receive the message.
  14.            MessageConsumer messageConsumer = session.createConsumer(topic);
             
  15. We create a JMS Message Consumer, messageConsumer2, to also receive the message.
  16.           MessageConsumer messageConsumer2 = session.createConsumer(topic);
            
  17. We create a JMS text message that we are going to send.
  18.            TextMessage message = session.createTextMessage("This is a text message");
            
  19. We send message to the topic
  20.            messageProducer.send(message);
            
  21. We start the connection. In order for delivery to occur on any consumers or subscribers on a connection, the connection must be started
  22.            connection.start();
            
  23. The message arrives at the first consumer
  24.            TextMessage messageReceived = (TextMessage) messageConsumer1.receive();
            
  25. The message arrives at the second consumer
  26.            messageReceived = (TextMessage) messageConsumer2.receive();
            
  27. And finally, always remember to close your JMS connections and resources after use, in a finally block. Closing a JMS connection will automatically close all of its sessions, consumers, producer and browser objects
  28.            finally
               {
                  if (initialContext != null)
                  {
                    initialContext.close();
                  }
                  if (connection != null)
                  {
                     connection.close();
                  }
               }