Доброго, %DATETIME%!
Что имеем:
Скриптец запускается node.js, смысл его подключиться к RabbitMQ затем ждать соединения сокета. Если кто-то стучит в сокет создаем новую очередь в RabbitMQ, шлем из этой очереди сообщения в сокет и т.д., если клиент "уходит" т.е. сокет закрылся, убиваем очередь.
В чем проблемма:
Все работает как надо, за исключением одного но, RabbitMQ создает каналы и создает их много, и они висят (убиваются только остановко скрипта в node.js).
Вопрос, почему так, и можно ли их как-то динамически убирать с моей стороны?
Скрин каналов в RabbitMQ:
Скриптец для node.js:
Спойлер (Отобразить)CODE (
javascript):
скопировать код в буфер обмена
var amqp = require('amqp'),
io = require('socket.io').listen(8889),
cTag = {},
exch = null;
rabbit = amqp.createConnection({
host: '192.168.158.169',
port: 5672,
vhost: 'jdchub',
login: 'jdchub',
password: 'jdchub'
});
rabbit.on( 'ready', function()
{
console.log('-- Connected to RabbitMQ');
io.sockets.on( 'connection', function( socket )
{
console.log( '-- Soket connected: ' + socket.id );
var opt = {
type: 'fanout',
durable: false,
autoDelete: false,
exclusive: false
};
rabbit.exchange( "chat", options = opt, function( exchange )
{
exch = exchange;
rabbit.queue( socket.id, function( queue )
{
queue.bind( exchange, socket.id );
queue.subscribe( function ( message )
{
console.log( '-- Recieved a message' );
var payload = unescape( message.data );
socket.emit( 'jdchub', {data: payload} );
})
.addCallback( function( result )
{
console.log( '-- ConsumerTag: ' + result.consumerTag );
cTag[socket.id] = result.consumerTag;
});
});
});
socket.on( 'disconnect', function()
{
console.log( '-- Socket closed: ' + socket.id );
rabbit.queue( socket.id, function( queue )
{
queue.unbind( exch, socket.id );
queue.unsubscribe( cTag[socket.id] );
queue.destroy();
console.log( '-- unsubscribe queue cTag: ' + cTag[socket.id] );
});
});
});
});