Подключение к ActiveMQ STOMP через веб-сокет с python - PullRequest
0 голосов
/ 28 октября 2018

У меня следующая конфигурация ActiveMQ на стороне сервера, в основном топать через websocket. Есть ли способ подключиться и начать использовать сообщения из очередей с любыми существующими библиотеками Python? Или чего мне не хватает?

<transportConnector name="websocket" uri="ws://0.0.0.0:31614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600" />

Я пробовал несколько python (stomp.py, stompest), но не могу подключиться к брокеру. На стороне сервера это выглядит так:

broker-amq 2018-10-28 18:18:09,130 | WARN  | badMessage: 400 No URI for HttpChannelOverHttp@35c228e5{r=0,c=false,a=IDLE,uri=} | org.eclipse.jetty.http.HttpParser | qtp428039780-131

Мои реализации с stomp.py:

class QueueListener(stomp.ConnectionListener):

def __init__(self, queueConnector):
    self.connector = queueConnector
def on_error(self, headers, message):
    self.connector.add_error(message)
def on_message(self, headers, message):
    self.connector.add_message(message)

class AMQHandler:

def __init__(self):
    self.connection = None
    self.queue = None
    self.messages = []
    self.errors = []
    self.listener = QueueListener(self)

def connect_to_broker(self, host, port, user, password):
    if self.connection != None:
        print "Old connection still active! Closing it..."
        self.disconnect_broker()
    self.connection = stomp.connect.StompConnection12(host_and_ports=[(host, port)])
    self.connection.set_listener('', self.listener)
    self.connection.start()
    self.connection.connect(username=user, passcode=password, wait=False, headers=None)

connector = AMQHandler()
connector.connect_to_broker("brokeraddress", 31614, "someone@somewhere.com", "xxxxx")

Моя реализация с stompest.py:

CONFIG = StompConfig('tcp://brokeraddress:31614', version=StompSpec.VERSION_1_2)
QUEUE = '/queue/test'

client = Stomp(CONFIG)
client.connect(headers={'passcode': 'xxxxx', 'login': 'someone@somewhere.com'})
client.connect()
client.subscribe(QUEUE, {StompSpec.ACK_HEADER: StompSpec.ACK_CLIENT_INDIVIDUAL})
while True:
    frame = client.receiveFrame()
    print('Got %s' % frame.info())
    client.ack(frame)
client.disconnect()
...