如何解决ActiveMQ配置SQL Server持久化后消息未写入ACTIVEMQ_MSGS表问题
问题排查与修复方案
以下是你配置中存在的问题及对应修复方案,逐一调整即可解决问题:
- 1. JDBC适配器适配错误
你当前使用了通用的<transact-jdbc-adapter />,SQL Server需要指定专用的MSSQL适配器,替换为以下配置:
<adapter> <mssql-jdbc-adapter /> </adapter>
这是核心错误,通用适配器无法正确适配SQL Server的消息写入逻辑,会出现建表正常但数据写入失败的问题。
- 2. Openwire协议端口配置错误
你当前的transportConnector配置端口为0,属于随机端口分配:
<transportConnector name="openwire" uri="tcp://0.0.0.0:0?maximumConnections=1000" />
ActiveMQ Web控制台默认会连接本地61616端口的broker发送消息,调整为固定端口即可:
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000" />
修改后确认broker启动时61616端口正常监听,再从控制台发消息测试。
- 3. 确认发送的消息为持久化类型
ActiveMQ默认只有持久化消息才会写入到持久化存储,你从控制台发送消息时,需要勾选Persistent选项;如果是代码发送消息,需要设置deliveryMode=2(持久化模式)。 - 4. 可选调整:队列内存限制优化
你当前队列的memoryLimit设置为1mb,过小的内存限制可能触发消息异步刷盘延迟,建议调整到100mb以上测试:
<policyEntry queue=">" producerFlowControl="true" memoryLimit="100mb" />
全部调整完成后重启ActiveMQ,重新发送消息即可在ACTIVEMQ_MSGS表中看到对应的消息记录。
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

