代码改变世界

完整教程:从零开始:ActiveMQ安装、Java应用实战与Web控制台体验

2026-01-19 15:16  tlnshuju  阅读(0)  评论(0)    收藏  举报

导语:在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系统
  1. 访问官网下载页面:http://activemq.apache.org/download.html
  2. 下载适合的版本(推荐5.18.3):apache-activemq-5.18.3-bin.zip
  3. 解压到指定目录,例如:D:\activemq\apache-activemq-5.18.3
  4. 进入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项目

<dependencies>
  <!-- ActiveMQ客户端 -->
    <dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-client</artifactId>
    <version>5.18.3</version>
    </dependency>
    <!-- JMS API -->
      <dependency>
      <groupId>javax.jms</groupId>
      <artifactId>jms</artifactId>
      <version>1.1</version>
      </dependency>
    </dependencies>

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. 运行流程

  1. 先启动MessageConsumer,使其处于等待接收状态
  2. 再运行MessageProducer发送消息
  3. 消费者将收到消息并打印

五、体验Web管理控制台:消息监控与管理

1. 访问控制台

启动ActiveMQ后,打开浏览器访问:http://localhost:8161/admin

默认登录名/密码:admin/admin

2. 核心功能

(1) 队列管理
  • 创建队列:点击"Queues" → “Add Queue”
  • 查看队列:在队列列表中,可以看到队列名称、消息数量、消费者数量等信息
  • 清空队列:点击队列名称 → "Purge"按钮
(2) 主题管理
  • 创建主题:点击"Topics" → “Add Topic”
  • 查看主题:查看订阅者数量、消息数量
(3) 消息监控
  • 查看消息:点击队列名称 → “View” → “Messages”,可以查看消息内容
  • 删除消息:在消息列表中选择消息 → "Delete"按钮

3. 实战体验

  1. 运行MessageProducer发送消息
  2. 打开Web控制台,进入"Queues"页面
  3. 找到"test.queue",点击查看
  4. 在消息列表中,可以看到刚才发送的"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控制台非常友好,建议多花时间熟悉它,这将大大提升你后续的开发和运维效率。