【发布时间】:2014-04-04 12:34:31
【问题描述】:
寻找一些代码示例来解决这个问题:-
想编写一些代码(Python 或 Javascript)来充当 RabbitMQ 队列的订阅者,以便在接收到消息时通过 websocket 将消息广播到任何连接的客户端。
我查看了 Autobahn 和 node.js(使用 "amqp" 和 "ws" ),但无法根据需要进行工作。这是使用 node.js 的 javascript 中的服务器代码:-
var amqp = require('amqp');
var WebSocketServer = require('ws').Server
var connection = amqp.createConnection({host: 'localhost'});
var wss = new WebSocketServer({port:8000});
wss.on('connection',function(ws){
ws.on('open', function() {
console.log('connected');
ws.send(Date.now().toString());
});
ws.on('message',function(message){
console.log('Received: %s',message);
ws.send(Date.now().toString());
});
});
connection.on('ready', function(){
connection.queue('MYQUEUE', {durable:true,autoDelete:false},function(queue){
console.log(' [*] Waiting for messages. To exit press CTRL+C')
queue.subscribe(function(msg){
console.log(" [x] Received from MYQUEUE %s",msg.data.toString('utf-8'));
payload = msg.data.toString('utf-8');
// HOW DOES THIS NOW GET SENT VIA WEBSOCKETS ??
});
});
});
使用此代码,我可以成功订阅 Rabbit 中的队列并接收发送到队列的任何消息。同样,我可以将 websocket 客户端(例如浏览器)连接到服务器并发送/接收消息。但是...如何在指示的点将 Rabbit 队列消息的有效负载作为 websocket 消息发送(“现在如何通过 WEBSOCKETS 发送”)?我认为这与卡在错误的回调中有关,或者它们需要以某种方式嵌套...?
或者,如果这可以在 Python 中更轻松地完成(通过 Autobahn 和 pika),那就太好了。
谢谢!
【问题讨论】:
-
网页直接访问RabbitMQ有问题吗?因为更快的方法是:rabbitmq.com/web-stomp.html
-
感谢您的建议。这个插件我见过,但是我不希望网页直接访问MQ消息,因为它们需要在网页可用之前进行处理。
标签: node.js websocket rabbitmq node-amqp python-pika