Stomp.py devuelve el mensaje del oyente

Uso de stomp.py (3.0.5) con python (2.6) junto con Apache ActiveMQ (5.5.1). Tengo el ejemplo básico funcionando sin ningún problema, pero ahora quiero devolver el mensaje recibido (en on_message ()) a una variable fuera de la clase MyListener.

Puedo imaginar que esta es una tarea bastante estándar, pero mis habilidades generales con python no son lo suficientemente buenas para descubrir cómo hacerlo. He rastreado google para obtener un ejemplo más avanzado y he leído sobre variables globales, pero aún parece que no puedo obtener el mensaje en una variable en lugar de simplemente imprimirlo en la pantalla.

Cualquier ayuda, muy apreciada!

Dado que se llamará al oyente en el hilo del receptor, debe realizar una transferencia de hilo si desea procesar el mensaje en otro hilo (hilo principal, por ejemplo).

Un ejemplo simple de transferencia de hilo es usar una variable compartida con locking y actualizar esa variable cuando el hilo receptor recibe un mensaje. Y, lea esa variable en el otro hilo, pero necesita usar el mecanismo de sincronización adecuado para asegurarse de no anular el mensaje y no se encontrará con interlockings.

Aquí está el código de ejemplo para usar alguna variable global con locking.

 rcvd_msg = None lock = thread.Condition() # executed in the main thread with lock: while rcvd_msg == None: lock.wait() # read rcvd_msg rcvd_msg = None lock.notifyAll() class Listener(ConnectionListener): def on_message(self, headers, message): # executed in the receiver thread global rcvd_msg, lock with lock: while rcvd_msg != None: lock.wait() rcvd_msg = message lock.notifyAll() 

¡¡Espero que ayude!!

Todo lo que tienes que hacer, es un ligero cambio de la clase de oyente:

 class MyListener(object): msg_list = [] def __init__(self): self.msg_list = [] def on_error(self, headers, message): self.msg_list.append('(ERROR) ' + message) def on_message(self, headers, message): self.msg_list.append(message) 

Y en el código, donde usas stomp.py:

 conn = stomp.Connection() lst = MyListener() conn.set_listener('', lst) conn.start() conn.connect() conn.subscribe(destination='/queue/test', id=1, ack='auto') time.sleep(2) messages = lst.msg_list conn.disconnect() return render(request, 'template.html', {'messages': messages}) 

Stomp.py cómo devolver un mensaje del oyente : un enlace a una pregunta similar de stackoverflow