Отправка сообщений RabbitMQ через веб-сокеты
Нужны примеры кода для решения этой проблемы:
Хотелось бы написать некоторый код (Python или Javascript), который бы действовал как подписчик очереди RabbitMQ, чтобы при получении сообщения он передавал сообщение через веб-сокеты любому подключенному клиенту.
Я посмотрел на Autobahn и node.js (используя "AMQP" а также "WS"), но не могу заставить вещи работать так, как нужно. Вот код сервера в javascript с использованием node.js: -
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 и получать любые сообщения, которые отправляются в очередь. Аналогичным образом я могу подключить клиент веб-сокета (например, браузер) к серверу и отправлять / получать сообщения. НО ... как я могу отправить полезную нагрузку сообщения очереди Кролика в виде сообщения веб-сокета в указанной точке («КАК ЭТО СЕЙЧАС ПОЛУЧАЕТСЯ В ЧЕРЕЗ ВЕБСАКЕТЫ»)? Я думаю, что это связано с неправильным обратным вызовом, или они должны быть как-то вложены ...?
В качестве альтернативы, если это можно сделать проще в Python (через Autobahn и Pika), это было бы здорово.
Спасибо !