You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveMQ Classic 5.16.2 STOMP订阅MESSAGE帧无ack头原因排查

STOMP订阅ActiveMQ主题无ACK头问题排查与解决

核心问题

ActiveMQ Classic 5.16.2默认对普通主题订阅(非持久化)忽略ack:client配置,不会在MESSAGE帧里携带ack头——因为Broker默认把主题订阅的消息传递模式锁死为自动确认,哪怕手动指定了手动确认也不会生效。

解决办法分两种情况:

1. 改用持久化主题订阅

只有持久化的主题订阅,Broker才会给MESSAGE帧添加ack头以支持手动确认。订阅时需要同时传递几个关键参数:

  • id: 唯一的订阅标识
  • client-id: 客户端唯一ID
  • persistent:true: 标记为持久化订阅

示例SUBSCRIBE帧:

SUBSCRIBE
destination:/topic/your_target_topic
ack:client
id:my_unique_sub_id
client-id:stomp_client_001
persistent:true

^@

2. 修改Broker配置开启普通主题手动确认

如果不想使用持久化订阅,需要修改activemq.xml中的STOMP连接器配置,添加allowTopicSubscriptionsWithAckClient="true"参数:

<transportConnectors>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?allowTopicSubscriptionsWithAckClient=true"/>
</transportConnectors>

修改完成后重启Broker,之后普通主题订阅设置ack:client时,MESSAGE帧就会携带ack头了。

验证方式

订阅成功后,收到的MESSAGE帧应该会包含类似如下的ack字段:

MESSAGE
destination:/topic/your_target_topic
ack:my_unique_sub_id:123456
message-id:ID:your_broker_id-1699999999999-1:1:1:1:1

your message content
^@

这时就可以用ACK帧手动确认:

ACK
id:my_unique_sub_id:123456

^@

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:20:06