mac 安装使用 activeMQ

AI摘要
ActiveMQ 5.14.x 配置 MySQL JDBC 需注意:版本严格匹配(Spring 4.1.9、MySQL 驱动与时区)、XML 中转义 & 为 &、依赖仅补 spring-jdbc-4.1.9.jar。启动前清理残留进程与 PID 文件,验证表自动创建及消息持久化。

简要介绍 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

  1. 下载 ActiveMQ

  2. 安装与配置

    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
    
  3. 启动与验证

    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 验证核心步骤

  1. 登录 MySQL → 进入activemq数据库(USE activemq)

  2. 检查是否自动创建 3 张表(activemq_acks/activemq_lock/activemq_msgs,表存在说明数据源配置生效)

  3. 发送测试消息后,查询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&amp;serverTimezone=UTC&amp;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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!