我正在研究用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()
答案 0 :(得分:2)
这里要注意的主要事情是,在调用SampleListener
时在conn
上设置的set_listener
实例将在消息到达队列时被异步调用。 。换句话说,客户端不会简单地等待/阻止直到消息到达。因此,需要调用sleep
,以使使用者在等待消息时保持活力。如果在第二个10
窗口中收到一条消息,则SampleListener
将收到该消息并打印该消息(即使用print(msg)
)。如果消息未到达队列,则SampleListener
将不会被调用,并且应用程序将直接终止。
最后的disconnect
就是很好的资源管理。通常,在不清理应用程序创建的资源(例如连接)的情况下终止应用程序是一种不好的做法。如果未调用disconnect
且应用程序终止,则将迫使代理最终关闭连接本身并清理所有服务器端资源。
如果on_message
花费的时间超过10秒(即sleep
的持续时间),我不确定会发生什么。我建议您尝试一下。