ActiveMQ 教程
一、ActiveMQ 简介
1. 什么是 ActiveMQ?
- 定义:Apache ActiveMQ 是一个开源的消息中间件,实现了 Java 消息服务(JMS)规范,支持多种消息协议和集群部署。
- 核心功能:
- 异步通信:解耦系统组件,提升性能。
- 消息持久化:确保消息不丢失。
- 多种消息模型:点对点(Queue)、发布/订阅(Topic)。
- 多语言支持:Java、C、Python、PHP 等。
- 适用场景:微服务架构、异步任务处理、系统解耦、流量削峰等。
二、环境搭建
1. 前置条件
- 安装 JDK:ActiveMQ 依赖 Java 环境,需先安装 JDK(建议版本 JDK 8+)。
- 下载 ActiveMQ:从 Apache ActiveMQ 官网 下载二进制包(如
apache-activemq-5.15.0-bin.tar.gz
)。
2. 安装步骤
(1) Windows 系统
tar -xzvf apache-activemq-5.15.0-bin.tar.gz -C D:\
cd D:\apache-activemq-5.15.0\bin
activemq.bat start
(2) Linux/Mac 系统
tar -xzvf apache-activemq-5.15.0-bin.tar.gz -C /usr/local/
cd /usr/local/apache-activemq-5.15.0/bin
./activemq.sh start
3. 访问管理控制台
- 默认端口:
- Web 管理控制台:
http://localhost:8161
- 消息服务端口:
tcp://localhost:61616
- 登录:用户名
admin
,密码 admin
。
三、核心概念与配置
1. 核心组件
组件 | 作用 |
---|
Broker | 消息代理,负责接收、存储和转发消息。 |
Destination | 消息目的地,分为 Queue (点对点)和 Topic (发布/订阅)。 |
ConnectionFactory | 创建连接的工厂类(如 ActiveMQConnectionFactory )。 |
Connection | 客户端与 Broker 的连接。 |
Session | 消息发送/接收的上下文,支持事务。 |
MessageProducer | 消息生产者(发送消息)。 |
MessageConsumer | 消息消费者(接收消息)。 |
2. 配置文件
四、消息模型与编程实践
1. 点对点模型(Queue)
(1) 代码示例(Java)
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination queue = session.createQueue("myQueue");
MessageProducer producer = session.createProducer(queue);
TextMessage message = session.createTextMessage("Hello ActiveMQ!");
producer.send(message);
MessageConsumer consumer = session.createConsumer(queue);
TextMessage receivedMessage = (TextMessage) consumer.receive();
System.out.println("Received: " + receivedMessage.getText());
session.close();
connection.close();
(2) 特点
- 每条消息只会被一个消费者接收。
- 适用于任务分发、订单处理等场景。
2. 发布/订阅模型(Topic)
(1) 代码示例(Java)
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination topic = session.createTopic("myTopic");
MessageProducer producer = session.createProducer(topic);
TextMessage message = session.createTextMessage("Hello Subscribers!");
producer.send(message);
MessageConsumer consumer = session.createConsumer(topic);
consumer.setMessageListener(message -> {
TextMessage textMessage = (TextMessage) message;
System.out.println("Received: " + textMessage.getText());
});
Thread.sleep(10000);
session.close();
connection.close();
(2) 特点
- 消息会被所有订阅者接收。
- 适用于日志广播、事件通知等场景。
五、高级功能与优化
1. 消息持久化
2. 消息选择器(Selector)
3. 集群与高可用
六、常见问题与命令
1. 常用命令
命令 | 作用 |
---|
activemq.bat start | 启动 ActiveMQ(Windows)。 |
./activemq.sh start | 启动 ActiveMQ(Linux/Mac)。 |
activemq.bat stop | 停止 ActiveMQ(Windows)。 |
./activemq.sh stop | 停止 ActiveMQ(Linux/Mac)。 |
activemq.bat status | 查看 ActiveMQ 运行状态(Windows)。 |
2. 日志分析
- 日志位置:
data/activemq.log
(默认日志文件)。 - 常见错误:
- 端口占用:修改
activemq.xml
中的端口号或关闭占用端口的程序。 - 内存不足:调整 JVM 参数(如
-Xms512m -Xmx1024m
)。
七、参考资源