导语:在Kafka之后,ActiveMQ作为Apache出品的开源消息中间件,依然在企业级应用中占据重要地位。本文将带你从零开始,完成ActiveMQ的本地安装、编写Java应用发送接收消息,并体验其Web管理控制台。同时,我们也会回顾ActiveMQ的"前世今生",了解它为何能在消息队列领域屹立不倒。
一、ActiveMQ简介:从JMS规范到开源消息总线ActiveMQ是Apache软件基金会出品的开源消息中间件,完全遵循Java Message Service (JMS) 1.1规范。它诞生于分布式系统蓬勃发展的时期,旨在解决分布式系统中各个组件之间的通信和协同问题。
作为最流行的开源消息总线,ActiveMQ支持多种消息模型,包括:
点对点(P2P)模式:消息仅被一个消费者接收发布/订阅(Pub/Sub)模式:消息可被多个消费者接收在当今的分布式架构中,ActiveMQ扮演着"消息桥梁"的角色,让系统间通信更加高效、可靠。
二、ActiveMQ的前世今生:从JMS规范到企业级应用1. 诞生背景:消息中间件的"混乱时代"在ActiveMQ出现之前,消息中间件市场非常混乱。各大厂商都有自己的实现,没有统一标准,导致各系统难以整合协作。为了解决这个问题,JMS(Java Message Service)规范应运而生,为Java消息中间件提供了一个统一标准。
关键点:ActiveMQ是完全遵循JMS规范开发的消息队列,这使得它成为Java企业级应用的首选消息中间件。
2. 发展历程2004年:ActiveMQ首次发布,基于JMS规范2007年:被Apache软件基金会纳入Apache项目2010年代:在企业级应用中广泛使用,成为JMS实现的首选2020年至今:随着Kafka等新消息队列的崛起,ActiveMQ在高性能场景下有所退让,但依然在企业级应用中保持重要地位3. 为何ActiveMQ能屹立不倒?完全支持JMS规范:与Spring等企业级框架无缝集成企业级特性:事务、持久化、高可用等丰富的管理工具:Web控制台、JMX等成熟稳定:经过多年生产环境验证 一句话总结:ActiveMQ是"企业级消息传递的稳健选择",Kafka是"大数据实时处理的性能之王"。
三、本地安装ActiveMQ:从下载到启动1. 环境要求JDK 8+(ActiveMQ 5.x版本需要JDK 8,不支持JDK 11+)2GB以上内存2. 下载与安装Windows系统访问官网下载页面:http://activemq.apache.org/download.html下载适合的版本(推荐5.18.3):apache-activemq-5.18.3-bin.zip解压到指定目录,例如:D:\activemq\apache-activemq-5.18.3进入bin\win64目录,双击activemq.bat启动Linux系统
# 下载
wget https://archive.apache.org/dist/activemq/5.18.3/apache-activemq-5.18.3-bin.tar.gz
# 解压
tar -xzf apache-activemq-5.18.3-bin.tar.gz
# 启动
cd apache-activemq-5.18.3/bin
./activemq start
3. 启动验证启动后,访问 http://localhost:8161/admin默认用户名/密码:admin/admin如果看到管理界面,说明安装成功⚠️ 常见问题:如果启动失败,检查端口占用(默认61616和8161)。使用netstat -ano | findstr 61616查看占用端口的进程,结束占用进程即可。
四、编写Java应用:发送和接收消息1. 创建Maven项目
2. 发送消息代码
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MessageProducer {
public static void main(String[] args) {
try {
// 创建连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// 创建连接
Connection connection = factory.createConnection();
connection.start();
// 创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建队列
Destination destination = session.createQueue("test.queue");
// 创建消息生产者
MessageProducer producer = session.createProducer(destination);
// 创建消息
TextMessage message = session.createTextMessage("Hello from ActiveMQ!");
// 发送消息
producer.send(message);
System.out.println("Message sent: " + message.getText());
// 关闭资源
producer.close();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
3. 接收消息代码
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MessageConsumer {
public static void main(String[] args) {
try {
// 创建连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// 创建连接
Connection connection = factory.createConnection();
connection.start();
// 创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建队列
Destination destination = session.createQueue("test.queue");
// 创建消息消费者
MessageConsumer consumer = session.createConsumer(destination);
// 接收消息
Message message = consumer.receive(5000); // 等待5秒
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println("Message received: " + textMessage.getText());
}
// 关闭资源
consumer.close();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
4. 运行流程先启动MessageConsumer,使其处于等待接收状态再运行MessageProducer发送消息消费者将收到消息并打印五、体验Web管理控制台:消息监控与管理1. 访问控制台启动ActiveMQ后,打开浏览器访问:http://localhost:8161/admin
默认登录名/密码:admin/admin
2. 核心功能(1) 队列管理创建队列:点击"Queues" → “Add Queue”查看队列:在队列列表中,可以看到队列名称、消息数量、消费者数量等信息清空队列:点击队列名称 → "Purge"按钮(2) 主题管理创建主题:点击"Topics" → “Add Topic”查看主题:查看订阅者数量、消息数量(3) 消息监控查看消息:点击队列名称 → “View” → “Messages”,可以查看消息内容删除消息:在消息列表中选择消息 → "Delete"按钮3. 实战体验运行MessageProducer发送消息打开Web控制台,进入"Queues"页面找到"test.queue",点击查看在消息列表中,可以看到刚才发送的"Hello from ActiveMQ!"消息 小技巧:在控制台中,你还可以看到连接信息、消费者列表、消息速率等详细监控数据,对于排查问题非常有帮助。
六、总结:ActiveMQ在现代消息队列生态中的定位1. ActiveMQ vs Kafka特性ActiveMQKafka协议JMS规范自有协议性能中等(万级TPS)高(百万级TPS)适用场景企业级应用解耦、事务保证大数据、日志收集、实时分析消息模型P2P和Pub/Sub仅支持Topic学习曲线低中企业级支持优秀一般2. 为何ActiveMQ仍然值得企业选择?企业级特性:事务、持久化、高可用与Spring无缝集成:Spring JMS支持丰富的管理工具:Web控制台、JMX稳定性与可靠性:经过多年生产环境验证3. 未来展望虽然Kafka在高性能场景下更受欢迎,但ActiveMQ在企业级应用中依然有其独特优势。ActiveMQ 5.x版本虽然更新较慢,但其稳定性、易用性和与现有JMS系统的兼容性,让它在传统企业应用中仍占有一席之地。
个人建议:如果你的业务是电商、金融等传统企业级应用,ActiveMQ是个更稳妥的选择;如果是在大数据、实时分析领域,Kafka可能更合适。
七、结语ActiveMQ作为Apache出品的开源消息中间件,虽然在高性能场景下不如Kafka,但在企业级应用中依然保持着强大的生命力。通过本文,你已经完成了ActiveMQ的本地安装、编写了Java应用发送接收消息、并体验了Web管理控制台。
希望这篇教程能帮助你快速上手ActiveMQ,为你的分布式系统设计增添一个可靠的"消息桥梁"。
最后的小提示:ActiveMQ的Web控制台非常友好,建议多花时间熟悉它,这将大大提升你后续的开发和运维效率。