#python #activemq #stomp #stomp.py
Вопрос:
Я пытаюсь получить сообщения от потребителя и отправить их в очередь. Для этого я использую Stomp.py
После просмотра статей и сообщений, я написал ниже код:
import ssl
import stomp
stompurl = "xxxxxxxx.mq.us-west-2.amazonaws.com"
stompuser = "stomuser"
stomppass = "password"
class MyListener(stomp.ConnectionListener):
msg_list = []
def __init__(self):
self.msg_list = []
def on_error(self, frame):
self.msg_list.append('(ERROR) ' frame.body)
def on_message(self, frame):
self.msg_list.append(frame.body)
conn = stomp.Connection(host_and_ports=[(stompurl, "61614")], auto_decode=True)
conn.set_ssl(for_hosts=[(stompurl, "61614")], ssl_version=ssl.PROTOCOL_TLS)
lst = MyListener()
listener = conn.set_listener('', lst)
conn.connect(stompuser, stomppass, wait=True)
# conn.send(body='Test message', destination='Test_QUEUE')
conn.subscribe('Test_QUEUE', '102')
print(listener.message_list)
import time; time.sleep(2)
messages = lst.msg_list
# conn.disconnect()
print(messages)
С помощью этого кода я могу отправлять сообщения Test_QUEUE
, но я не могу получить все сообщения от потребителя. Как я могу извлечь все сообщения от потребителя и отправить в очередь для обработки.
Комментарии:
1. Есть какие-нибудь отзывы о моем ответе?
Ответ №1:
Я не эксперт по Python STOMP, но на любом другом языке, который я использовал, когда вы создаете асинхронный (т. Е. неблокирующий) прослушиватель сообщений, как вы это сделали, вы должны запретить выход вашего приложения. У вас time.sleep(2)
там есть, но реально ли этого времени достаточно, чтобы получить все сообщения из очереди?
Похоже, что ваше приложение завершит работу после print(messages)
этого, а это означает, что если вы не получите все сообщения во time.sleep(2)
время, то ваше приложение просто завершится.