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

Python如何读取ActiveMQ的队列?调用stomp的subscribe报错缺少id参数

报错原因

stomp.py库的subscribe()方法要求必须传入id必填参数,该参数为自定义的当前连接下唯一的订阅标识,用于区分同个连接内的多个订阅任务。此外你原有代码还存在两个问题:

  1. conn.connect(wait = True)末尾多了多余的减号,属于语法错误
  2. subscribe()方法本身无返回值,直接打印无法拿到队列数据,需要注册消息监听器接收ActiveMQ推送的消息
完整可运行实现代码
import stomp

# 自定义消息监听器,处理队列推送的消息
class MessageListener(stomp.ConnectionListener):
    def on_message(self, frame):
        # frame.body为消息内容,可自行做业务处理
        print("接收到队列消息:", frame.body)

if __name__ == "__main__":
    # 替换为实际ActiveMQ的主机地址和stomp端口,默认stomp端口为61613
    conn = stomp.Connection([("127.0.0.1", 61613)])
    # 注册消息监听器
    conn.set_listener("queue_listener", MessageListener())
    # 连接MQ,如有账号密码需补充username和password参数
    conn.connect(username="admin", password="admin", wait=True)
    # 订阅队列,id自定义且同连接下唯一即可,ack='auto'表示收到消息自动确认
    conn.subscribe(destination="test_queue", id="my_sub_001", ack="auto")

    # 保持进程运行持续监听,如需停止可调用conn.disconnect()断开连接
    while True:
        pass
补充说明
  • 如不需要自动确认消息,可将ack参数改为client,处理完业务逻辑后手动调用conn.ack(id=frame.headers["message-id"], subscription=frame.headers["subscription"])完成确认,未确认的消息会在连接断开后重新入队
  • 同一连接下多个订阅的id不能重复,否则会出现订阅冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 14:09:04