Зачем использовать метод сна после вызова подписки в слушателе Python ActiveMQ с STOMP - PullRequest
1 голос
/ 09 июля 2019

Я изучаю код клиента ActiveMQ ( потребитель ), написанный на Python.Он использует протокол STOMP.Я не могу понять, почему мы вызываем методы sleep и disconnect после подписки на очередь назначения.Может ли кто-нибудь помочь мне понять реальный процесс, описанный ниже, в коде слушателя Python.

Вопросы:

  1. Почему мы вызываем методы sleep и disconnect после вызова subscribingв очередь назначения?
  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 Ответ

2 голосов
/ 09 июля 2019

Здесь главное отметить, что экземпляр SampleListener, установленный на conn при вызове set_listener, будет вызываться асинхронно при поступлении сообщения в очередь.Другими словами, клиент не будет просто ждать / блокировать, пока не прибудет сообщение.Следовательно, sleep должен быть вызван, чтобы потребитель оставался в живых в течение некоторого времени ожидания сообщения.Если сообщение приходит во время этого 10 второго окна, то SampleListener получит его и распечатает сообщение (то есть, используя print(msg)).Если сообщение не поступает в очередь, то SampleListener не будет вызвано, и приложение просто прекратит работу.

disconnect в конце - это просто хорошее управление ресурсами.Как правило, это плохая практика - завершать работу приложения без очистки созданных им ресурсов (например, соединений).Если disconnect является , а не , и приложение завершает работу, то брокер будет вынужден в конечном итоге закрыть само соединение и очистить все ресурсы на стороне сервера.

Если on_message требует большечем 10 секунд (т.е. продолжительность sleep) Я не уверен, что произойдет.Я рекомендую вам попробовать и посмотреть.

...