Send JMS Text Message to ActiveMQ


In this post we are going to send a simple text message to ActiveMQ using JMS.

Install ActiveMQ

First install ActiveMQ as per my previous post.

Start ActiveMQ as per the instructions in the previous

activemq restart

Open the web browser and view the queues.

http://localhost:8161/admin/queues.jsp
001-camelActiveMQ

There should be no visible queues.

Create a Maven Project

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.skills421.camel.basics</groupId>
<artifactId>CamelBlog</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>

<!-- Needed for ActiveMQ - JMS -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.3.2</version>
</dependency>

<!-- JUnit for testing -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

Create the JMSManager

package com.skills421.examples.camel.basics;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class JMSManager
{
public void sendMessage(final String message, final String queueName) throws Exception
{
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
Connection connection = connectionFactory.createConnection();

Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

Queue queue = session.createQueue("example-queue");
MessageProducer producer = session.createProducer(queue);

connection.start();

TextMessage m1 = session.createTextMessage();
m1.setText(message);

producer.send(m1);

connection.close();

}
}

Create the JUnit Test

package com.skills421.examples.camel.basics;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

public class JMSManagerTest
{
private JMSManager jmsManager;

@Before
public void setup()
{
jmsManager = new JMSManager();
}

@Test
public void testSendSimpleMessage()
{
try
{
jmsManager.sendMessage("Hello World", "example1-queue");
}
catch (Exception e)
{
fail(e.getMessage());
e.printStackTrace();
}
}

}

Run the JUnit Test

Refresh the ActiveMQ Web Page

003-camelActiveMQ

Note that we can now see the example-queue and it contains one message

Click on the message and we can see the message details

004-camelActiveMQ

If you look at the bottom of the screen you can see the message we sent – Hello World

Notes

The ActiveMQConnection.DEFAULT_BROKER_URL is tcp://localhost:61616 and references the same ActiveMQConnection session we are looking at in the web browser.

The session serves many purposes including:

  • It is a factory for its message producers and consumers.
  • It supplies provider-optimized message factories.
  • It is a factory for TemporaryTopics and TemporaryQueues.
  • It provides a way to create Queue or Topic objects for those clients that need to dynamically manipulate provider-specific destination names.
  • It supports a single series of transactions that combine work spanning its producers and consumers into atomic units.
  • It defines a serial order for the messages it consumes and the messages it produces.
  • It retains messages it consumes until they have been acknowledged.
  • It serializes execution of message listeners registered with its message consumers.
  • It is a factory for QueueBrowsers.

When we create the session, we specify the following parameters:

  • transacted – indicates whether the session is transacted
  • acknowledgeMode – indicates whether the consumer or the client will acknowledge any messages it receives; ignored if the session is transacted. Legal values areSession.AUTO_ACKNOWLEDGESession.CLIENT_ACKNOWLEDGE, and Session.DUPS_OK_ACKNOWLEDGE.

When then create a queue / a handle to the queue if it already exists

To send messages onto the queue, we need to create a MessageProducer, and to retrieve messages from the queue we need to create a MessageConsumer.  In this example, we have only created a producer as we want to use the web interface to view the messages.

Before we can send or receive messages, we must first start the connection.

We use the session to create the message object and then set the values of the message before sending it.

Finally we close our connection.

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s