为什么在使用 STOMP 调用 Python ActiveMQ 侦听器中的订阅后使用睡眠方法
Why use a sleep method after invoking the subscribe in Python ActiveMQ listener with STOMP
正在研究Python写的ActiveMQ客户端代码(consumer)。它使用 STOMP 协议。我无法理解为什么我们在订阅目标队列后调用 sleep
和 disconnect
方法。有人可以帮助我理解下面 python 侦听器代码背后的真实过程。
问题:
- 为什么我们在调用
subscribing
到目标队列后调用 sleep
和 disconnect
方法?
什么时候调用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()
这里主要需要注意的是,调用set_listener
时在conn
上设置的SampleListener
实例会在调用异步时被调用消息到达队列。换句话说,客户端不会简单地 wait/block 直到消息到达。因此,需要调用 sleep
以使消费者保持活动状态等待消息。如果消息在此 10
秒 window 期间到达,则 SampleListener
将接收它并打印消息(即使用 print(msg)
)。如果消息没有到达队列,则 SampleListener
不会被调用,应用程序将简单地终止。
最后的disconnect
正好是很好的资源管理。通常,在不清理应用程序创建的资源(例如连接)的情况下终止应用程序是一种不好的做法。如果 disconnect
未 被调用并且应用程序终止,则代理将被迫最终关闭连接本身并清理所有 server-side 资源。
如果 on_message
超过 10 秒(即 sleep
的持续时间),我不确定会发生什么。我建议你试试看。
正在研究Python写的ActiveMQ客户端代码(consumer)。它使用 STOMP 协议。我无法理解为什么我们在订阅目标队列后调用 sleep
和 disconnect
方法。有人可以帮助我理解下面 python 侦听器代码背后的真实过程。
问题:
- 为什么我们在调用
subscribing
到目标队列后调用sleep
和disconnect
方法? 什么时候调用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()
这里主要需要注意的是,调用set_listener
时在conn
上设置的SampleListener
实例会在调用异步时被调用消息到达队列。换句话说,客户端不会简单地 wait/block 直到消息到达。因此,需要调用 sleep
以使消费者保持活动状态等待消息。如果消息在此 10
秒 window 期间到达,则 SampleListener
将接收它并打印消息(即使用 print(msg)
)。如果消息没有到达队列,则 SampleListener
不会被调用,应用程序将简单地终止。
最后的disconnect
正好是很好的资源管理。通常,在不清理应用程序创建的资源(例如连接)的情况下终止应用程序是一种不好的做法。如果 disconnect
未 被调用并且应用程序终止,则代理将被迫最终关闭连接本身并清理所有 server-side 资源。
如果 on_message
超过 10 秒(即 sleep
的持续时间),我不确定会发生什么。我建议你试试看。