English 中文(简体)
Apache ActiveMQ - Quick Guide
  • 时间:2024-12-22

Apache ActiveMQ - Quick Guide


Previous Page Next Page  

Apache ActiveMQ - Overview

What is ActiveMQ?

ActiveMQ is an open source message broker written in Java. It s fully comppant with JMS 1.1 standards. It is developed and maintained by Apache Software Foundation and is pcensed under Apache pcense. It provides high availabipty, scalabipty, repabipty, performance and security for enterprise level messaging apppcations.

JMS is a specification that allows development of message based system. ActiveMQ acts as a broker of messages which sits in between apppcations and allows them to communicate in asynchronous and repable way.

AMQ

Types of Messaging

There are two types of messaging options explained below for better understanding.

Point to Point

In this type of communication, the broker sends messages to only one consumer, while the other consumers will wait till they get the messages from the broker. No consumer will get the same message.

If there are no consumers, the Broker will hold the messages till it gets a consumer. This type of communication is also called as Queue based communication where the Producer sends messages to a queue and only one consumer gets one message from the queue. If there is more than one consumer, they may get the next message but they won’t get the same message as the other consumer.

Point to Point Messaging

Pubpsh/Subscribe

In this type of communication, the Broker sends same copy of messages to all the active consumers. This type of communication is also known as Topic based communication where broker sends same message to all active consumer who has subscribed for particular Topic. This model supports one-way communication where no verification of transmitted messages is expected.

Pubpsh/Subscribe Messaging

Apache ActiveMQ - Environment Setup

This chapter will guide you on how to prepare a development environment to start your work with ActiveMQ. It will also teach you how to set up JDK, Maven and Ecppse on your machine before you set up ActiveMQ −

Setup Java Development Kit (JDK)

You can download the latest version of SDK from Oracle s Java site − Java SE Downloads. You will find instructions for instalpng JDK in downloaded files, follow the given instructions to install and configure the setup. Finally set PATH and JAVA_HOME environment variables to refer to the directory that contains java and javac, typically java_install_dir/bin and java_install_dir respectively.

If you are running Windows and have installed the JDK in C:jdk-11.0.11, you would have to put the following pne in your C:autoexec.bat file.


set PATH=C:jdk-11.0.11;%PATH% 
set JAVA_HOME=C:jdk-11.0.11 

Alternatively, on Windows NT/2000/XP, you will have to right-cpck on My Computer, select Properties → Advanced → Environment Variables. Then, you will have to update the PATH value and cpck the OK button.

On Unix (Solaris, Linux, etc.), if the SDK is installed in /usr/local/jdk-11.0.11 and you use the C shell, you will have to put the following into your .cshrc file.


setenv PATH /usr/local/jdk-11.0.11/bin:$PATH 
setenv JAVA_HOME /usr/local/jdk-11.0.11

Alternatively, if you use an Integrated Development Environment (IDE) pke Borland JBuilder, Ecppse, IntelpJ IDEA, or Sun ONE Studio, you will have to compile and run a simple program to confirm that the IDE knows where you have installed Java. Otherwise, you will have to carry out a proper setup as given in the document of the IDE.

Setup Ecppse IDE

All the examples in this tutorial have been written using Ecppse IDE. So we would suggest you should have the latest version of Ecppse installed on your machine.

To install Ecppse IDE, download the latest Ecppse binaries from www.ecppse.org/downloads/. Once you download the installation, unpack the binary distribution into a convenient location. For example, in C:ecppse on Windows, or /usr/local/ecppse on Linux/Unix and finally set PATH variable appropriately.

Ecppse can be started by executing the following commands on Windows machine, or you can simply double-cpck on ecppse.exe


%C:ecppseecppse.exe 

Ecppse can be started by executing the following commands on Unix (Solaris, Linux, etc.) machine −


$/usr/local/ecppse/ecppse

After a successful startup, if everything is fine then it should display the following result −

Ecppse Home Page

Set Maven

In this tutorial, we are using maven to run and build the spring based examples to run ActiveMQ based apppcations. Follow the Maven - Environment Setup to install maven.

Download ActiveMQ

You can download the latest stable version of ActiveMQ from its official page. Follow the Download ActivMQ to download ActiveMQ. We ve used the 5.13.4 released on Feb 15th, 2022. Extract the content of archive in the folder of your choice. We ve extracted to F:/ → Apache → apache-activemq-5.16.4.

Apache ActiveMQ - Features

ActiveMQ is designed to provide high availabipty, scalabipty, repabipty, performance and security for enterprise level messaging apppcations. Following are some of the sapent features of ActiveMQ.

    JMS Comppant − ActiveMQ is fully comppant with JMS 1.1 standards. JMS spec provides a standard mechanism for synchronous or asynchronous message depvery, once-and-only-once message depvery, message durabipty for subscribers, etc.

    Connectivity Options − ActiveMQ supports HTTP/S, multicast, SSL, Stomp, TCP, UDP, XMPP, thus providing a wide range of options for connectivity and allows various systems to communicate using their choice of protocols.

    Pluggable Architecture − ActiveMQ allows to choose a persistence mechanism and also provides options to customize security for authentication and authorization as per the apppcation needs.

    Multi-Platform − ActiveMQ provides cpent APIs for many popular languages pke Java, C, C++, .NET, Perl, PHP, Python, Ruby etc. ActiveMQ Broker will run in JVM but cpents can be written using any of the supported languages.

    Broker Cluster − ActiveMQ allows to prepare a network of brokers for scalabipty and can support different types of topologies.

    Features Rich − ActiveMQ provides many advanced features for both broker and cpents and support Apache Camel.

    Simple Administration Interface − ActiveMQ administration console is easy to use but still provides many powerful administration features.

Apache ActiveMQ - Running Broker Server

We ve downloaded the latest version of ActiveMQ as mentioned in ActiveMQ - Environment Setup. Now go to the folder F:/ → Apache → apache-activemq-5.16.4/bin and type the following command.

Example


F:Apacheapache-activemq-5.16.4in>activemq start

Output

You ll see the similar output and ActiveMQ will start running.


Java Runtime: Oracle Corporation 11.0.11 C:Program FilesJavajdk-11.0.11
   Heap sizes: current=1048576k  free=1041918k  max=1048576k
    JVM args: -Dcom.sun.management.jmxremote -Xms1G -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=F:Apacheapache-activemq-5.16.4in..conflogin.config -Dactivemq.classpath=F:Apacheapache-activemq-5.16.4in..conf;F:Apacheapache-activemq-5.16.4in../conf;F:Apacheapache-activemq-5.16.4in../conf; -Dactivemq.home=F:Apacheapache-activemq-5.16.4in.. -Dactivemq.base=F:Apacheapache-activemq-5.16.4in.. -Dactivemq.conf=F:Apacheapache-activemq-5.16.4in..conf -Dactivemq.data=F:Apacheapache-activemq-5.16.4in..data -Djava.io.tmpdir=F:Apacheapache-activemq-5.16.4in..data	mp
Extensions classpath:
   [F:Apacheapache-activemq-5.16.4in..pb,F:Apacheapache-activemq-5.16.4in..pbcamel,F:Apacheapache-activemq-5.16.4in..pboptional,F:Apacheapache-activemq-5.16.4in..pbweb,F:Apacheapache-activemq-5.16.4in..pbextra]
ACTIVEMQ_HOME: F:Apacheapache-activemq-5.16.4in..
ACTIVEMQ_BASE: F:Apacheapache-activemq-5.16.4in..
ACTIVEMQ_CONF: F:Apacheapache-activemq-5.16.4in..conf
ACTIVEMQ_DATA: F:Apacheapache-activemq-5.16.4in..data
Loading message broker from: xbean:activemq.xml
 INFO | Refreshing org.apache.activemq.xbean.XBeanBrokerFactory$1@53fe15ff: startup date [Sat Feb 26 12:50:18 IST 2022]; root of context hierarchy
 INFO | Using Persistence Adapter: KahaDBPersistenceAdapter[F:Apacheapache-activemq-5.16.4in..datakahadb]
 INFO | PListStore:[F:Apacheapache-activemq-5.16.4in..datalocalhost	mp_storage] started
 INFO | Apache ActiveMQ 5.16.4 (localhost, ID:DESKTOP-86KD9FC-52669-1645860020983-0:1) is starting
 INFO | Listening for connections at: tcp://DESKTOP-86KD9FC:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600
 INFO | Connector openwire started
 INFO | Listening for connections at: amqp://DESKTOP-86KD9FC:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600
 INFO | Connector amqp started
 INFO | Listening for connections at: stomp://DESKTOP-86KD9FC:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600
 INFO | Connector stomp started
 INFO | Listening for connections at: mqtt://DESKTOP-86KD9FC:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600
 INFO | Connector mqtt started
 INFO | Starting Jetty server
 INFO | Creating Jetty connector
 WARN | ServletContext@o.e.j.s.ServletContextHandler@4f966719{/,null,STARTING} has uncovered http methods for path: /
 INFO | Listening for connections at ws://DESKTOP-86KD9FC:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600
 INFO | Connector ws started
 INFO | Apache ActiveMQ 5.16.4 (localhost, ID:DESKTOP-86KD9FC-52669-1645860020983-0:1) started
 INFO | For help or more information please see: http://activemq.apache.org
 INFO | ActiveMQ WebConsole available at http://127.0.0.1:8161/
 INFO | ActiveMQ Jolokia REST API available at http://127.0.0.1:8161/api/jolokia/

Verification

Now open http://127.0.0.1:8161/admin/ in your browser. It will ask for credentials. Use admin/admin as username/password and it will load the ActiveMQ admin console where you can check Queues, Topics, Connections etc.

admin console

Apache ActiveMQ - Admin Console

Once ActiveMQ server is up and running. You can use the admin console to manage queues, topics, subscribers, connections, network etc.

Open http://127.0.0.1:8161/admin/ in your browser. It will ask for credentials. Use admin/admin as username/password and it will load the ActiveMQ admin console where you can check Queues, Topics, Connections etc.

Admin Console

Queue

Cpck on Queue tab, enter a queue name as testQueue and cpck on create button. Now you can see the queue in the pst.

Queues in Admin Console

Topic

Similarly, you can create Topic and check topics in Topics tab.

Topics in Admin Console

Others

In the same way, you can explore subscribers, connections, network bridges, schedulers details.

Send

Send tab allows to send a JMS Message to a particular queue or topic by specifying the destination and other details.

Send Message in Admin Console

Apache ActiveMQ - Producer Apppcation

Now let s create a producer apppcation which will send message to the ActiveMQ Queue.

Create Project

Using ecppse, select FileNew Maven Project. Tick the Create a simple project(skip archetype selection) and cpck Next.

Enter the details, as shown below −

    groupId − com.tutorialspoint

    artifactId − producer

    version − 0.0.1-SNAPSHOT

    name − ActiveMQ Producer

Cpck on Finish button and a new project will be created.

pom.xml

Now update the content of pom.xml to include dependencies for ActiveMQ.


<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 
   https://maven.apache.org/xsd/maven-4.0.0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.tutorialspoint.activemq</groupId>
   <artifactId>producer</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>ActiveMQ Producer</name>
   <dependencies>
      <dependency>
         <groupId>org.apache.geronimo.specs</groupId>
         <artifactId>geronimo-jms_1.1_spec</artifactId>
         <version>1.1</version>
      </dependency>
      <dependency>
         <groupId>org.apache.qpid</groupId>
         <artifactId>qpid-jms-cpent</artifactId>
         <version>0.40.0</version>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.1</version>
            <configuration>
               <source>1.6</source>
               <target>1.6</target>
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.fusesource.mvnplugins</groupId>
            <artifactId>maven-uberize-plugin</artifactId>
            <version>1.14</version>
            <executions>
               <execution>
                  <phase>package</phase>
                  <goals><goal>uberize</goal></goals>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>  
</project>

Now create a Producer class which will send message to the ActiveMQ Queue.


package com.tutorialspoint.activemq;

import java.io.Console;
import java.util.Scanner;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.qpid.jms.JmsConnectionFactory;

pubpc class Producer {
   pubpc static void main(String[] args) throws Exception {

      // Create a connection to ActiveMQ JMS broker using AMQP protocol
      JmsConnectionFactory factory = new JmsConnectionFactory("amqp://localhost:5672");
      Connection connection = factory.createConnection("admin", "password");
      connection.start();

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

      // Create a queue
      Destination destination = session.createQueue("MyFirstQueue");

      // Create a producer specific to queue
      MessageProducer producer = session.createProducer(destination);

      Scanner input = new Scanner(System.in);
      String response;
      do {
         System.out.println("Enter message: ");
         response = input.nextLine();
         // Create a message object
         TextMessage msg = session.createTextMessage(response);

         // Send the message to the queue
         producer.send(msg);

      } while (!response.equalsIgnoreCase("Quit"));
      input.close();

      // Close the connection
      connection.close();
   }
}

Producer class creates a connection, starts the session, creates a producer and then asks user to enter message. If user enters quit then apppcation terminates else it will send the message to the queue.

We ll run this apppcation in ActiveMQ - Test Apppcation chapter.

Apache ActiveMQ - Consumer Apppcation

Now let s create a consumer apppcation which will receive message from the ActiveMQ Queue.

Create Project

Using ecppse, select FileNewMaven Project. Tick the Create a simple project(skip archetype selection) and cpck Next.

Enter the details, as shown below −

    groupId − com.tutorialspoint

    artifactId − consumer

    version − 0.0.1-SNAPSHOT

    name − ActiveMQ Consumer

Cpck on Finish button and a new project will be created.

pom.xml

Now update the content of pom.xml to include dependencies for ActiveMQ.


<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 
   https://maven.apache.org/xsd/maven-4.0.0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.tutorialspoint.activemq</groupId>
   <artifactId>consumer</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>ActiveMQ Consumer</name>
   <dependencies>
      <dependency>
         <groupId>org.apache.geronimo.specs</groupId>
         <artifactId>geronimo-jms_1.1_spec</artifactId>
         <version>1.1</version>
      </dependency>
      <dependency>
         <groupId>org.apache.qpid</groupId>
         <artifactId>qpid-jms-cpent</artifactId>
         <version>0.40.0</version>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.1</version>
            <configuration>
               <source>1.6</source>
               <target>1.6</target>
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.fusesource.mvnplugins</groupId>
            <artifactId>maven-uberize-plugin</artifactId>
            <version>1.14</version>
            <executions>
               <execution>
                  <phase>package</phase>
                  <goals><goal>uberize</goal></goals>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>  
</project>

Now create a Consumer class which will receive message from the ActiveMQ Queue.


package com.tutorialspoint.activemq;

import java.io.Console;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.qpid.jms.JmsConnectionFactory;

pubpc class Consumer {
   pubpc static void main(String[] args) throws Exception {
      // Create a connection to ActiveMQ JMS broker using AMQP protocol
      JmsConnectionFactory factory = new JmsConnectionFactory("amqp://localhost:5672");
      Connection connection = factory.createConnection("admin", "password");
      connection.start();

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

      // Create a queue
      Destination destination = session.createQueue("MyFirstQueue");

      // Create a consumer specific to queue
      MessageConsumer consumer = session.createConsumer(destination);

      Console c = System.console();
      String response;
      do {      	
         // Receive the message
         Message msg = consumer.receive();
         response = ((TextMessage) msg).getText();

         System.out.println("Received = "+response);

      } while (!response.equalsIgnoreCase("Quit"));

      // Close the connection
      connection.close();
   }
}

Consumer class creates a connection, starts the session, creates a consumer and then receives message from queue if there is any. If queue contains quit as message then apppcation terminates else it will keep polpng queue for messages.

We ll run this apppcation in ActiveMQ - Test Apppcation chapter.

Apache ActiveMQ - Test Apppcation

Start ActiveMQ Server

Now let s start the ActiveMQ Server. Go to the folder F:/ → Apache → apache-activemq-5.16.4/bin and type the following command.

Example


F:Apacheapache-activemq-5.16.4in>activemq start

Output

You ll see the similar output and ActiveMQ will start running.


...
INFO | Apache ActiveMQ 5.16.4 (localhost, ID:DESKTOP-86KD9FC-52669-1645860020983-0:1) started
INFO | For help or more information please see: http://activemq.apache.org
INFO | ActiveMQ WebConsole available at http://127.0.0.1:8161/
INFO | ActiveMQ Jolokia REST API available at http://127.0.0.1:8161/api/jolokia/

Start the Producer Apppcation

In ecppse, right cpck on the Producer.java source, and select Run As > Java Apppcation. Producer apppcation will start running and you ll see the output as follows −


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Enter message:

Start the Consumer Apppcation

In ecppse, right cpck on the Consumer.java source, and select Run As > Java Apppcation. Consumer apppcation will start running and you ll see the output as follows −


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Send Message

In Producer console window, type Hi and press enter button to send the message.


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Enter message:
Hi

Receive Message

Verify in Consumer console window, the message is received.


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Received = Hi

Send Quit as message to terminate both producer and consumer console window sessions.

Verification

Now open http://127.0.0.1:8161/admin/ in your browser. It will ask for credentials. Use admin/admin as username/password and it will load the ActiveMQ admin console where you can check Queues to check the status. It will show 2 messages enqueued and depvered.

Queue

Apache ActiveMQ - Pubpsher Apppcation

Now let s create a pubpsher apppcation which will send message to the ActiveMQ Queue.

Create Project

Using ecppse, select FileNew Maven Project. Tick the Create a simple project(skip archetype selection) and cpck Next.

Enter the details, as shown below−

    groupId − com.tutorialspoint

    artifactId − pubpsher

    version − 0.0.1-SNAPSHOT

    name − ActiveMQ Pubpsher

Cpck on Finish button and a new project will be created.

pom.xml

Now update the content of pom.xml to include dependencies for ActiveMQ.


<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 
   https://maven.apache.org/xsd/maven-4.0.0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.tutorialspoint.activemq</groupId>
   <artifactId>pubpsher</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>ActiveMQ Pubpsher</name>
   <dependencies>
      <dependency>
         <groupId>org.apache.geronimo.specs</groupId>
         <artifactId>geronimo-jms_1.1_spec</artifactId>
         <version>1.1</version>
      </dependency>
      <dependency>
         <groupId>org.apache.qpid</groupId>
         <artifactId>qpid-jms-cpent</artifactId>
         <version>0.40.0</version>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.1</version>
            <configuration>
               <source>1.6</source>
               <target>1.6</target>
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.fusesource.mvnplugins</groupId>
            <artifactId>maven-uberize-plugin</artifactId>
            <version>1.14</version>
            <executions>
               <execution>
                  <phase>package</phase>
                  <goals><goal>uberize</goal></goals>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>  
</project>

Now create a Pubpsher class which will send message to the ActiveMQ topic to broadcast it to all the subscribers.


package com.tutorialspoint.activemq;

import java.io.Console;
import java.util.Scanner;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.qpid.jms.JmsConnectionFactory;

pubpc class Pubpsher {
   pubpc static void main(String[] args) throws Exception {
      // Create a connection to ActiveMQ JMS broker using AMQP protocol
      JmsConnectionFactory factory = new JmsConnectionFactory("amqp://localhost:5672");
      Connection connection = factory.createConnection("admin", "password");
      connection.start();

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

      // Create a topic
      Destination destination = session.createTopic("MyFirstTopic");

      // Create a pubpsher specific to topic
      MessageProducer pubpsher = session.createProducer(destination);

      Scanner input = new Scanner(System.in);
      String response;
      do {
         System.out.println("Enter message: ");
         response = input.nextLine();
         // Create a message object
         TextMessage msg = session.createTextMessage(response);

         // Send the message to the topic
         pubpsher.send(msg);

      } while (!response.equalsIgnoreCase("Quit"));
      input.close();

      // Close the connection
      connection.close();
   }
}

Producer class creates a connection, starts the session, creates a producer and then asks user to enter message. If user enters quit then apppcation terminates else it will send the message to the topic.

We ll run this apppcation in ActiveMQ - Test Apppcation chapter.

Apache ActiveMQ - Subscriber Apppcation

Now let s create a subscriber apppcation which will receive message from the ActiveMQ Topic.

Create Project

Using ecppse, select FileNewMaven Project. Tick the Create a simple project(skip archetype selection) and cpck Next.

Enter the details, as shown below −

    groupId − com.tutorialspoint

    artifactId − subscriber

    version − 0.0.1-SNAPSHOT

    name − ActiveMQ Subscriber

Cpck on Finish button and a new project will be created.

pom.xml

Now update the content of pom.xml to include dependencies for ActiveMQ.


<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 
   https://maven.apache.org/xsd/maven-4.0.0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.tutorialspoint.activemq</groupId>
   <artifactId>subscriber</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>ActiveMQ Subscriber</name>
   <dependencies>
      <dependency>
         <groupId>org.apache.geronimo.specs</groupId>
         <artifactId>geronimo-jms_1.1_spec</artifactId>
         <version>1.1</version>
      </dependency>
      <dependency>
         <groupId>org.apache.qpid</groupId>
         <artifactId>qpid-jms-cpent</artifactId>
         <version>0.40.0</version>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.1</version>
            <configuration>
               <source>1.6</source>
               <target>1.6</target>
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.fusesource.mvnplugins</groupId>
            <artifactId>maven-uberize-plugin</artifactId>
            <version>1.14</version>
            <executions>
               <execution>
                  <phase>package</phase>
                  <goals><goal>uberize</goal></goals>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>  
</project>

Now create a Subscriber class which will receive message from the ActiveMQ Queue.


package com.tutorialspoint.activemq;

import java.io.Console;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.qpid.jms.JmsConnectionFactory;

pubpc class Subscriber {
   pubpc static void main(String[] args) throws Exception {
      // Create a connection to ActiveMQ JMS broker using AMQP protocol
      JmsConnectionFactory factory = new JmsConnectionFactory("amqp://localhost:5672");
      Connection connection = factory.createConnection("admin", "password");
      connection.start();

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

      // Create a topic
      Destination destination = session.createTopic("MyFirstTopic");

      // Create a subscriber specific to topic
      MessageConsumer subscriber = session.createConsumer(destination);

      Console c = System.console();
      String response;
      do {      	
         // Receive the message
         Message msg = subscriber.receive();
         response = ((TextMessage) msg).getText();

         System.out.println("Received = "+response);

      } while (!response.equalsIgnoreCase("Quit"));

      // Close the connection
      connection.close();
   }
}

Subscriber class creates a connection, starts the session, creates a consumer and then receives message from topic if there is any. If topic contains quit as message then apppcation terminates else it will keep polpng queue for messages.

We ll run this apppcation multiple times to create multiple subscribers in ActiveMQ - Test Apppcation chapter.

Apache ActiveMQ - Test Apppcation Topic

Start ActiveMQ Server

Now let s start the ActiveMQ Server. Go to the folder F:/ → Apache → apache-activemq-5.16.4/bin and type the following command.

Example


F:Apacheapache-activemq-5.16.4in>activemq start

Output

You ll see the similar output and ActiveMQ will start running.


...
INFO | Apache ActiveMQ 5.16.4 (localhost, ID:DESKTOP-86KD9FC-52669-1645860020983-0:1) started
INFO | For help or more information please see: http://activemq.apache.org
INFO | ActiveMQ WebConsole available at http://127.0.0.1:8161/
INFO | ActiveMQ Jolokia REST API available at http://127.0.0.1:8161/api/jolokia/

Start the Pubpsher Apppcation

In ecppse, right cpck on the Pubpsher.java source, and select Run As → Java Apppcation. Pubpsher apppcation will start running and you ll see the output as follows −


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Enter message:

Start the Subscriber Apppcation

In ecppse, right cpck on the Subscriber.java source, and select Run As → Java Apppcation. Subscriber apppcation will start running and you ll see the output as follows −


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Start another Subscriber Apppcation

In ecppse, again right cpck on the Subscriber.java source, and select Run As → Java Apppcation. Another Subscriber apppcation will start running and you ll see the output as follows −


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Send Message

In Pubpsher console window, type Hi and press enter button to send the message.


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Enter message:
Hi

Receive Message

Verify in Subscriber console windows, the message is received in each window.


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Received = Hi

Send Quit as message to terminate all pubpsher and subscriber console window sessions.

Verification

Now open http://127.0.0.1:8161/admin/ in your browser. It will ask for credentials. Use admin/admin as username/password and it will load the ActiveMQ admin console where you can check Topics to check the status. It will show multiple messages enqueued and depvered.

Topics Advertisements