AWS ActiveMQ извлекает сообщения от потребителя и отправляет их в очередь

#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) время, то ваше приложение просто завершится.