mac 安装使用 activeMQ
简要介绍 ActiveMQ 是 Apache 旗下的一款开源消息中间件,基于 Java Message Service(JMS)规范,能够实现不同应用之间的异步通信,降低系统间的耦合度
ActiveMQ 不仅是基于 JMS 规范的消息中间件,更是一款 “全功能” 的中间件产品。JMS 规范定义了消息中间件的核心接口与通信标准,而 ActiveMQ 在此基础上进行了丰富扩展,支持从简单的点对点通信到复杂的分布式消息路由。
举个通俗的例子:如果把不同系统比作不同的 “快递公司网点”,消息就是 “包裹”,ActiveMQ 就是 “快递中转站”—— 网点(系统)无需直接对接,只需将包裹(消息)送到中转站(ActiveMQ),再由中转站根据目的地(队列 / 主题)分发到目标网点,极大降低了网点间的依赖。
ActiveMQ 默认占用两个关键端口:
61616:消息通信端口(客户端连接用)
8161:管理控制台端口(Web 界面)
检查端口是否监听:
lsof -i :61616
lsof -i :8161
安装 ActiveMQ v5.14.5
下载 ActiveMQ
- 访问 ActiveMQ 归档页面
- 下载
apache-activemq-5.14.5-bin.tar.gz
安装与配置
bash
# 解压文件 tar -zxvf apache-activemq-5.14.5-bin.tar.gz # 移动到应用目录 sudo mv apache-activemq-5.14.5 /usr/local/activemq # 赋予执行权限 sudo chmod +x /usr/local/activemq/bin/activemq
启动与验证
bash
# 启动 ActiveMQ /usr/local/activemq/bin/activemq start # 验证是否启动成功(默认管理界面) open http://localhost:8161/admin/ # 默认用户名/密码:admin/admin
ActiveMQ 5.14.x 配置 MySQL JDBC:问题与重点总结
一、你遇到的核心问题总结(按出现顺序)
1. 进程 ID 文件无效问题
现象:启动时提示 No or outdated process id in ‘/usr/local/activemq/data/activemq.pid’
原因:之前 ActiveMQ 异常关闭(如强制终止进程),导致 pid 文件残留或损坏
解决:清理残留进程(kill -9 进程ID)+ 删除无效 pid 文件(rm -f /usr/local/activemq/data/activemq.pid)
2. XML 实体引用语法错误
现象:启动报 对实体 “serverTimezone” 的引用必须以 ‘;’ 分隔符结尾
原因:activemq.xml 中 jdbcUrl 直接用 & 连接参数(如 useSSL=false&serverTimezone=UTC),XML 语法要求 & 必须转义为 &
解决:将 jdbcUrl 中所有 & 替换为 &(如 useSSL=false&serverTimezone=UTC)
3. 第三方数据源类找不到问题(3 次依赖缺失)
| 错误类型 | 现象(类找不到) | 原因 | 解决 |
| C3P0 数据源缺失 | com.mchange.v2.c3p0.ComboPooledDataSource | ActiveMQ 5.14.x 未默认集成 C3P0 依赖 | 放弃 C3P0,改用更兼容的数据源 |
| DBCP 数据源缺失 | org.apache.commons.dbcp.BasicDataSource | 旧版本精简依赖,未包含 DBCP 模块 | 改用 Spring 内置的 DriverManagerDataSource |
| Spring JDBC 包缺失 | org.springframework.jdbc.datasource.DriverManagerDataSource | ActiveMQ 5.14.x 安装包依赖不完整,缺少spring-jdbc包 | 手动下载 spring-jdbc-4.1.9.RELEASE.jar 放入lib目录 |
二、配置核心重点总结(关键避坑点)
1. 版本匹配是前提(最易忽略的重点)
ActiveMQ 与 Spring 版本绑定:ActiveMQ 5.14.x 必须对应 Spring 4.1.9.RELEASE(补充spring-jdbc包时,版本不能错,否则会类冲突)
MySQL 驱动与 MySQL 版本匹配:
MySQL 8.0+ → 驱动类用 com.mysql.cj.jdbc.Driver + jdbcUrl 加 serverTimezone=UTC
MySQL 5.7 及以下 → 驱动类用 com.mysql.jdbc.Driver(无需加时区参数)
依赖包版本唯一:lib目录中同一类的依赖只能有一个版本(如仅保留spring-jdbc-4.1.9.RELEASE.jar,删除其他版本 Spring JDBC 包)
2. XML 配置语法必须严谨(语法错误直接导致启动失败)
特殊字符转义:jdbcUrl 中所有 & 必须转义为 &(如 useSSL=false&allowPublicKeyRetrieval=true)
数据源类路径正确:最终使用的数据源类是 org.springframework.jdbc.datasource.DriverManagerDataSource(无拼写错误,注意包路径是springframework.jdbc.datasource)
持久化配置关联正确:jdbcPersistenceAdapter 的 dataSource 属性必须指向数据源 Bean 的id(即 dataSource=”#mysqlDataSource”,mysqlDataSource 与 Bean 的id一致)
3. 依赖补充要精准(针对 5.14.x 版本的特殊操作)
缺失依赖明确:仅需补充 spring-jdbc-4.1.9.RELEASE.jar(无需其他包,该包已包含DriverManagerDataSource类)
依赖放置路径正确:必须放入 usr/local/activemq/lib 目录(其他目录 ActiveMQ 无法加载)
放置后验证:用 ls /usr/local/activemq/lib | grep spring-jdbc-4.1.9.RELEASE 确认包已存在
4. 启动与验证步骤不能少(确保配置生效)
启动前清理:每次启动前先终止残留进程(ps aux | grep activemq | grep -v grep | awk ‘{print $2}’ | xargs kill -9 2>/dev/null),避免端口占用
用控制台启动查错:优先用 ./activemq console 启动(实时打印日志,报错可直接定位,比后台启动更易排查问题)
MySQL 验证核心步骤:
登录 MySQL → 进入activemq数据库(USE activemq)
检查是否自动创建 3 张表(activemq_acks/activemq_lock/activemq_msgs,表存在说明数据源配置生效)
发送测试消息后,查询activemq_msgs表(SELECT msg_text FROM activemq_msgs),确认消息能存储(验证持久化成功)
三、最终可用的核心配置片段(备查)
pwd;=/usr/local/activemq/conf
vim activemq.xml
```xml
<!-- 1. 数据源配置(Spring DriverManagerDataSource,5.14.x兼容) -->
<bean id="mysqlDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 驱动类:根据MySQL版本选,此处为MySQL 8.0+ -->
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<!-- URL:&已转义,含时区参数(MySQL 8.0+必需) -->
<property name="url" value="jdbc:mysql://localhost:3306/activemq?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"/>
<!-- MySQL账号密码:替换为你的实际信息 -->
<property name="username" value="root"/>
<property name="password" value="你的MySQL密码"/>
</bean>
<!-- 2. 持久化配置(关联数据源) -->
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysqlDataSource"
createTablesOnStartup="true"/> <!-- 首次启动true,后续改false -->
</persistenceAdapter>
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: