Доброго, %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] ); }); }); }); });
Зарание, благодарен.(Отредактировано автором: 15 Января, 2013 - 00:20:51)
|