使用Python通过WebSockets将RabbitMQ事件推送到浏览器的最简单方法?
我有一个现成的Python系统,它通过Rabbit MQ接收消息。请问,有什么最简单的方法可以把这些事件通过WebSockets推送到浏览器里?如果这个解决方案在所有主流浏览器上都能用,那就更好了。
谢谢,
Virgil
2 个回答
2
你可以在服务器上使用 Twisted、txAMQP 和 Autobahn|Python 来写一个桥接程序,大概只需要50行代码。而在浏览器端,你可以使用 Autobahn|JS。Autobahn 实现了 WebSocket,并在其上面实现了 WAMP,这让你可以通过 WebSocket 进行发布与订阅(还有远程过程调用)。
如果你使用原始的 WebSocket,你就得自己想办法实现发布与订阅的功能,因为我想这正是你想要的:把 AMQP 的发布订阅功能扩展到网页上。或者你也可以看看 STOMP。
免责声明:我是 WAMP 和 Autobahn 的原作者。
6
这里有一个完整的例子,使用了 RabbitMQ 和 Tornado,你可以在这个链接找到它。
你可以在网站上找到所有的说明:
总之,你需要:
pip install pika
pip install tornado
首先,你需要注册你的 RabbitMQ:
def threaded_rmq():
channel.queue_declare(queue="my_queue")
logging.info('consumer ready, on my_queue')
channel.basic_consume(consumer_callback, queue="my_queue", no_ack=True)
channel.start_consuming()
然后,你需要注册你的 WebSocket 客户端:
class SocketHandler(tornado.websocket.WebSocketHandler):
def open(self):
logging.info('WebSocket opened')
clients.append(self)
def on_close(self):
logging.info('WebSocket closed')
clients.remove(self)
当你收到消息时,可以把它转发到 WebSocket 页面。
def consumer_callback(ch, method, properties, body):
logging.info("[x] Received %r" % (body,))
# The messagge is brodcast to the connected clients
for itm in clients:
itm.write_message(body)