У меня следующая конфигурация ActiveMQ на стороне сервера, в основном топать через websocket. Есть ли способ подключиться и начать использовать сообщения из очередей с любыми существующими библиотеками Python? Или чего мне не хватает?
<transportConnector name="websocket" uri="ws://0.0.0.0:31614?maximumConnections=1000&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()