一. ActiveMQ的安装,环境CentOS7
步骤:
1)登录到ActiveMQ的官网,下载安装包。https://activemq.apache.org/components/classic/download/
2)下载 tar.gz 压缩包
3)压缩包上传到 VMware 上安装的 CentOS 系统中 opt 目录下,并将其解压
4)可以在CentOS系统的根目录下创建 myactiveMQ 目录,并将解压的 apache-activemq-5.15.9 复制到该目下
5)进入 /myactiveMQ/apache-activemq-5.15.9/bin 目下,启动 activemq
6)关闭 ContOS 下防火墙
ContOS6 关闭防火墙命令:[root@localhost ~]
#servcie iptables stop
ContOS7 关闭防火墙命令:[root@localhost ~]
#systemctl stop firewalld.service
7)浏览器中输入虚拟机的IP地址加端口号8161(activemq默认客户端端口号)例如:http://192.168.1.1:8161
看到以上界面,代表你的 activemq 安装成功
8)进入管理界面
二. IDEA建立maven工程
POM.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.zym</groupId>
<artifactId>test_activemq</artifactId>
<version>1.0-SNAPSHOT</version>
<name>test_activemq</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!--activemq需要的jav包-->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.9</version>
</dependency>
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.16</version>
</dependency>
<!--下面是junit/log4等通用配置-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
三. 消息生产者代码
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class JmsProduce {
//你的activemq安装的系统的url+61616(mq默认访问端口)
public static final String ACTIVEMQ_URL = "tcp://192.168.1.1:61616";
public static final String QUEUE_NAME = "queue01";
public static void main(String[] args) throws JMSException {
//1. 创建连接工厂,按照给定的Url地址,采用默认的用户名和密码
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//2. 通过连接工厂,获取连接 并启动访问
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
//3. 创建会话session,两个参数 第一个叫事务/第二个叫签收
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//4. 创建目的地
Queue queue = session.createQueue(QUEUE_NAME);
//5. 创建消息的生产者
MessageProducer messageProducer = session.createProducer(queue);
//6. 生产消息并将消息发送到MQ的队列里面
for ( int i = 1 ; i <= 3 ; i++ ){
TextMessage textMessage = session.createTextMessage("Msg-----" + i);//创建消息
messageProducer.send(textMessage);//发送到MQ队列
}
//7. 关闭资源
messageProducer.close();
session.close();
connection.close();
System.out.println("***********消息发动到MQ完成*************");
}
}
查看消息是否生产成功
四. 消息消费者
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
import java.io.IOException;
public class JmsConsumer {
public static final String ACTIVEMQ_URL = "tcp://192.168.1.105:61616";
public static final String QUEUE_NAME = "queue01";
public static void main(String[] args) throws JMSException, IOException {
//1. 创建连接工厂,按照给定的Url地址,采用默认的用户名和密码
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//2. 通过连接工厂,获取连接 并启动访问
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
//3. 创建会话session,两个参数 第一个叫事务/第二个叫签收
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//4. 创建目的地
Queue queue = session.createQueue(QUEUE_NAME);
//5. 创建消费者
MessageConsumer messageConsumer = session.createConsumer(queue);
/*//6. 同步阻塞方法消费消息,订阅者或接受者调用messageConsumer的receive()方法来接受消息,receive()在接受消息之前一直阻塞
while(true){
//TextMessage textMessage = (TextMessage)messageConsumer.receive();
TextMessage textMessage = (TextMessage)messageConsumer.receive(4000L);
if(null != textMessage){
System.out.println("消费者收到消息:"+textMessage.getText());
}else{
break;
}
}*/
//6. 异步阻塞方法消费消息,订阅者或者接受者通过messageConsumer的setMessageListener方法注册一个消息监听器。
// 当消息到达之后,系统自动调用监听器onMessage方法。
messageConsumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
if(null != message && message instanceof TextMessage){
TextMessage textMessage = (TextMessage)message;
try {
System.out.println("消费者接受消息"+ textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});
System.in.read();
//7. 关闭资源
messageConsumer.close();
session.close();
connection.close();
}
}
查看消息是否被消费
消费消息有两种方式,一种是同步阻塞方法,另一种是异步阻塞方法,具体方法代码参考以上代码。