如何在stomp.py中不创建类获取send()响应以实现失败重试?
无需创建自定义类获取stomp.py send()方法的发送状态
完全可以不用创建继承ConnectionListener的自定义类,通过以下两种方式就能实现:
1. 动态绑定on_send回调函数
直接实例化默认的ConnectionListener,然后给它的on_send属性赋值自定义处理函数,就能捕获发送时的帧信息:
import stomp def process_send_result(frame): # 从frame中提取发送状态、消息ID等关键信息 print(f"发送帧指令:{frame.command}") print(f"消息ID:{frame.headers.get('message-id')}") print(f"目标队列:{frame.headers.get('destination')}") # 初始化连接 conn = stomp.Connection([('localhost', 61613)]) # 创建默认监听器实例 base_listener = stomp.ConnectionListener() # 绑定自定义的on_send处理函数 base_listener.on_send = process_send_result # 为连接设置监听器 conn.set_listener("send-tracker", base_listener) # 建立连接并发送消息 conn.connect("admin", "admin", wait=True) conn.send(body="测试消息", destination="/queue/test") conn.disconnect()
2. 利用回执(receipt)机制确认发送成功
如果更关注发送是否成功而非发送过程的帧信息,可以在调用send()时指定receipt参数,然后动态绑定on_receipt和on_error回调来处理结果:
import stomp def handle_success_receipt(frame): receipt_id = frame.headers.get("receipt-id") print(f"消息发送成功,回执ID:{receipt_id}") def handle_send_error(frame): print(f"消息发送失败,错误信息:{frame.body}") conn = stomp.Connection([('localhost', 61613)]) base_listener = stomp.ConnectionListener() # 绑定回执和错误处理函数 base_listener.on_receipt = handle_success_receipt base_listener.on_error = handle_send_error conn.set_listener("result-tracker", base_listener) conn.connect("admin", "admin", wait=True) # 发送时指定唯一回执ID custom_receipt_id = "msg-20240520-001" conn.send(body="带回执的测试消息", destination="/queue/test", receipt=custom_receipt_id) conn.disconnect()
这两种方式都无需编写自定义的ConnectionListener子类,直接复用默认实例并动态绑定回调即可满足故障转移重试的信息收集需求。
内容的提问来源于stack exchange,提问作者Umesh K
相关产品推荐
相关产品推荐

