Simple transacted JMS consumer

Ever looked for a simple JMS Consumer template – here is one and it is transacted too 🙂

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.naming.InitialContext;


public class Consumer {

    public static void main(String[] args) throws Exception {

        InitialContext context = new InitialContext();
        ConnectionFactory factory = 
                       (ConnectionFactory) context.lookup("ConnectionFactory");

        Connection connection = factory.createConnection();
        connection.start();

        // Start the transaction
        Session session = 
                    connection.createSession(true, Session.SESSION_TRANSACTED);

        Destination destination = (Destination) context.lookup("test");
        MessageConsumer consumer = session.createConsumer(destination);

        Message message;

        try {
            // Get all messages of the queue
            while ((message = consumer.receive(3000)) != null) {
                System.out.println("Message: " + message);
            }
            // All is well - commit transaction
            session.commit();

        } catch (Exception e) {
            e.printStackTrace();
            // Something is wrong - rollback transaction
            session.rollback();
        }

        // Cleanup
        session.close();
        connection.close();
        context.close();

    }
}

This solution depends on JNDI so here is the jndi.properties also:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory

# Use the following property to configure the default connector
java.naming.provider.url = tcp://localhost:61616

# Register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
queue.test = NIKLAS.TEST

I’m using an ActiveMQ server as JMS provider which works good with the ActiveMQ client:
pom.xml

 
       
            org.apache.activemq
            activemq-client
            5.7.0
        

Tested on Windows 10, Maven 3.8.4, Java 11.0.18 and ActiveMQ Client 5.7.0

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

This site uses Akismet to reduce spam. Learn how your comment data is processed.