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