使用Python中的WebSocket将RabbitMQ事件推送到浏览器的最简单方法?

使用Python中的WebSocket将RabbitMQ事件推送到浏览器的最简单方法?,python,events,browser,websocket,rabbitmq,Python,Events,Browser,Websocket,Rabbitmq,我有一个现有的Python系统,它使用RabbitMQ接收消息。使用Python的WebSocket将这些事件推送到浏览器的最简单方法是什么?如果该解决方案也能在所有主流浏览器中运行,则会带来额外的好处 谢谢, Virgil您可以使用和在服务器上用大约50行代码编写一个网桥,并在浏览器端。Autobahn实现WebSocket,并在其顶部通过WebSocket为您提供发布和订阅(以及远程过程调用) 当使用原始WebSocket时,您必须在WebSocket上创建自己的发布和订阅,因为我想这就是您

我有一个现有的Python系统,它使用RabbitMQ接收消息。使用Python的WebSocket将这些事件推送到浏览器的最简单方法是什么?如果该解决方案也能在所有主流浏览器中运行,则会带来额外的好处

谢谢, Virgil

您可以使用和在服务器上用大约50行代码编写一个网桥,并在浏览器端。Autobahn实现WebSocket,并在其顶部通过WebSocket为您提供发布和订阅(以及远程过程调用)

当使用原始WebSocket时,您必须在WebSocket上创建自己的发布和订阅,因为我想这就是您所追求的:将AMQP PubSub扩展到Web。或者你可以看看STOMP

免责声明:我是WAMP和Autobahn的原始作者。

这里我写了一个使用和RabbitMQ的完整示例

您可以在网站上找到所有说明:

无论如何,你需要:

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()
然后注册web套接字客户端:

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)
当您收到消息时,可以将其重定向到web套接字页面

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)

回答得好!现在就开始测试。现在它开始工作了,非常棒,再次感谢:-)如何关闭此rabbitmq队列以停止消费??