python-3.x - 为什么在使用 STOMP 在 Python ActiveMQ 侦听器中调用订阅后使用睡眠方法
问题描述
我正在研究用 Python 编写的 ActiveMQ 客户端代码(消费者)。它使用 STOMP 协议。我无法理解为什么我们在订阅目标队列后调用sleep
和方法。disconnect
有人可以帮我理解下面python监听器代码背后的真实过程。
问题:
- 为什么我们在调用目标队列后调用一个
sleep
和disconnect
方法?subscribing
它什么时候调用on_message()方法?
import stomp import time class SampleListener(object): def on_message(self, headers, msg): print(msg) conn = stomp.Connection([('localhost',61613)]) conn.set_listener('SampleListener', SampleListener()) conn.start() conn.connect() conn.subscribe(destination='queue_name', id=1, ack='auto') time.sleep(10) # secs conn.disconnect()
解决方案
这里要注意的主要是当消息到达队列时,调用时SampleListener
设置的实例将被异步调用。换句话说,客户端不会简单地等待/阻塞,直到消息到达。因此,需要调用以使消费者保持活动状态等待消息。如果在第二个窗口期间有消息到达,那么将接收它并打印消息(即使用)。如果消息没有到达队列,则不会调用,应用程序将简单地终止。conn
set_listener
sleep
10
SampleListener
print(msg)
SampleListener
最后disconnect
只是良好的资源管理。一般而言,在不清理应用程序创建的资源(例如连接)的情况下终止应用程序是一种不好的做法。如果没有disconnect
被调用并且应用程序终止,那么代理将被迫最终关闭连接本身并清理任何服务器端资源。
如果on_message
需要超过 10 秒(即 的持续时间sleep
),我不确定会发生什么。我建议你试试看。
推荐阅读
- python-3.x - 当索引匹配时,从数据框行中的所有列中减去 Series 中的值
- javascript - 将悬停时的 CSS 类应用于其他元素
- datasource - Weblogic 12c 数据源处于挂起模式
- r - 使用“外部”df 传播数据框?
- reactjs - i18next + React + Webpack - getFixedT 不是函数
- mysql - 如果来自多个 UNION 查询的所有结果都为 0,则更新表
- sqlite - SQL 查询 - 根据非排序值限制生成的查询行
- json - Flutter,将Firestore文档中的Json解析为地图失败
- regex - 在正则表达式中捕获未定义数量的项目
- rest - Spring WebMVC 异常处理