1. Download ActiveMQ, go to the activemq official website to download the corresponding installation package for Windows or Linux
2. Install ActiveMQ
Under Windows system, unzip apache-activemq-5.15.3-bin.zip , and then there are win32 and win64 folders in the bin directory (select according to your computer system), activemq.bat in the win64 directory (right click, run as administrator) ) can be run from the command line. In addition, double-clicking InstallService.bat can also run it as a service after installation.
The Linux installation runs.
Download apache-activemq-5.15.3-bin.tar.gz , then unzip it, then run bin/activemq start
Test whether the installation is successful: visit http://localhost:8161 , if you can access it, the installation is successful.
3. Create a simple spring-boot project to introduce ActiveMQ
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
4. Write experimental code
Queue mode (consumers consume messages under the producer queue on average)
package com.codingos.springboot.activemq.queue;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
* 队列模式 生产者
*/
public class AppProducer {
private static final String url = "tcp://localhost:61616";
private static final String queueName = "queue-test";
public static void main(String[] args) throws JMSException {
// 1.常见ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
// 2.创建Connection
Connection connection = connectionFactory.createConnection();
// 3.启动连接
connection.start();
// 4.创建会话 (1参: 是否在事务中处理, 2参: 使用自动应答模式)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建一个目标队列
Destination destination = session.createQueue(queueName);
// 6.创建生产者
MessageProducer producer = session.createProducer(destination);
for (int i = 0; i < 100; i++) {
// 7.创建消息
TextMessage textMessage = session.createTextMessage("Message " + i);
// 8.发送消息
producer.send(textMessage);
System.out.println("发送消息: " + textMessage.getText());
}
// 9.关闭连接
connection.close();
}
}
package com.codingos.springboot.activemq.queue;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
* 队列模式 消费者
*/
public class AppConsumer {
private static final String url = "tcp://localhost:61616";
private static final String queueName = "queue-test";
public static void main(String[] args) throws JMSException {
// 1.常见ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
// 2.创建Connection
Connection connection = connectionFactory.createConnection();
// 3.启动连接
connection.start();
// 4.创建会话 (1参: 是否在事务中处理, 2参: 使用自动应答模式)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建一个目标队列
Destination destination = session.createQueue(queueName);
// 6.创建消费者
MessageConsumer consumer = session.createConsumer(destination);
// 7.创建监听器
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("接收消息: "+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
Topic mode (subscribers fully consume messages under the publisher's topic)
package com.codingos.springboot.activemq.topic;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
* 主题模式 发布者
*/
public class AppProducer {
private static final String url = "tcp://localhost:61616";
private static final String topicName = "topic-test";
public static void main(String[] args) throws JMSException {
// 1.常见ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
// 2.创建Connection
Connection connection = connectionFactory.createConnection();
// 3.启动连接
connection.start();
// 4.创建会话 (1参: 是否在事务中处理, 2参: 使用自动应答模式)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建一个目标主题
Destination destination = session.createTopic(topicName);
// 6.创建发布者
MessageProducer producer = session.createProducer(destination);
for (int i = 0; i < 100; i++) {
// 7.创建消息
TextMessage textMessage = session.createTextMessage("Message " + i);
// 8.发送消息
producer.send(textMessage);
System.out.println("发送消息: " + textMessage.getText());
}
// 9.关闭连接
connection.close();
}
}
package com.codingos.springboot.activemq.topic;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
* 主题模式 订阅者
*/
public class AppConsumer {
private static final String url = "tcp://localhost:61616";
private static final String topicName = "topic-test";
public static void main(String[] args) throws JMSException {
// 1.常见ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
// 2.创建Connection
Connection connection = connectionFactory.createConnection();
// 3.启动连接
connection.start();
// 4.创建会话 (1参: 是否在事务中处理, 2参: 使用自动应答模式)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建一个目标主题
Destination destination = session.createTopic(topicName);
// 6.创建订阅者
MessageConsumer consumer = session.createConsumer(destination);
// 7.创建监听器
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("接收消息: "+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}