Stomp.py从侦听器返回消息
问题内容:
结合使用stomp.py(3.0.5)和python(2.6)和Apache
ActiveMQ(5.5.1)。我已经有了基本示例,没有任何问题,但是现在我想将接收到的消息(在on_message()中)返回到MyListener类之外的变量。
我可以想象这是一个非常标准的任务,但是我的一般python技能还不足以解决如何做到这一点。我已经用google搜索了一个更高级的示例并阅读了全局变量,但是我似乎仍然无法将消息放入变量中,而不仅仅是将其打印到屏幕上。
任何帮助,万分感谢!
问题答案:
由于将在接收方线程中调用侦听器,因此,如果要在其他线程(例如主线程)中处理消息,则应执行线程切换。
线程切换的一个简单示例是使用具有锁定功能的共享变量,并在接收方线程接收到消息时更新该变量。并且,在另一个线程中读取该变量,但是您需要使用适当的同步机制来确保您不覆盖消息,并且不会遇到死锁。
这是在锁定中使用某些全局变量的示例代码。
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()
希望有帮助!!