Python如何读取ActiveMQ的队列?调用stomp的subscribe报错缺少id参数
报错原因
stomp.py库的subscribe()方法要求必须传入id必填参数,该参数为自定义的当前连接下唯一的订阅标识,用于区分同个连接内的多个订阅任务。此外你原有代码还存在两个问题:
conn.connect(wait = True)末尾多了多余的减号,属于语法错误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
相关产品推荐
相关产品推荐

