为什么在使用STOMP调用Python ActiveMQ侦听器中的订阅之后使用睡眠方法

时间:2019-07-09 12:19:11

标签: python-3.x activemq stomp

我正在研究用Python编写的ActiveMQ客户端代码(消费者)。它使用STOMP协议。我无法理解为什么订阅目标队列后为什么要调用sleepdisconnect方法。有人可以帮助我了解python侦听器代码下面的真实过程。

问题:

  1. 为什么在将sleep调用到目标队列后又调用disconnectsubscribing方法?
  2. 何时调用 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()
    

1 个答案:

答案 0 :(得分:2)

这里要注意的主要事情是,在调用SampleListener时在conn上设置的set_listener实例将在消息到达队列时被异步调用。 。换句话说,客户端不会简单地等待/阻止直到消息到达。因此,需要调用sleep,以使使用者在等待消息时保持活力。如果在第二个10窗口中收到一条消息,则SampleListener将收到该消息并打印该消息(即使用print(msg))。如果消息未到达队列,则SampleListener将不会被调用,并且应用程序将直接终止。

最后的disconnect就是很好的资源管理。通常,在不清理应用程序创建的资源(例如连接)的情况下终止应用程序是一种不好的做法。如果未调用disconnect且应用程序终止,则将迫使代理最终关闭连接本身并清理所有服务器端资源。

如果on_message花费的时间超过10秒(即sleep的持续时间),我不确定会发生什么。我建议您尝试一下。