Chaque fois que je publie un nouveau message, je crée une nouvelle connexion. Je veux avoir seulement une connexion et un canal pour tous les appels publich.N'a besoin que d'une connexion avec RbbitMQ pour l'application de noeud, pas pour chaque appel de publication
Lecture à partir du site Web rabbitmq: Certaines applications nécessitent plusieurs connexions à un courtier AMQP. Cependant, il n'est pas souhaitable de garder plusieurs connexions TCP ouvertes en même temps, car cela consomme des ressources système et rend plus difficile la configuration des pare-feu. Les connexions AMQP 0-9-1 sont multiplexées avec des canaux qui peuvent être considérés comme des «connexions légères qui partagent une seule connexion TCP».
Mais comment ??? Voici mon code:
Channel.js
var amqp = require('amqplib/callback_api');
var url = process.env.AMQP_URL || 'amqp://guest:[email protected]:5672';
module.exports = createQueueChannel;
function createQueueChannel(queue, cb) {
console.log("connecting................");
amqp.connect(url, onceConnected);
function onceConnected(err, conn) {
if (err) {
console.error('Error connecting:', err.stack);
}
else {
console.log('connected');
conn.createChannel(onceChannelCreated);
}
function onceChannelCreated(err, channel) {
if (err) {
cb(err);
}
else {
channel.assertQueue(queue, {durable: true}, onceQueueCreated);
}
function onceQueueCreated(err) {
if (err) {
cb(err);
}
else {
cb(null, channel, conn);
}
}
}
}
}
Publish.js
var Channel = require('./channel');
var queue = 'queue';
Channel(queue, function(err, channel, conn) {
if (err) {
console.error(err.stack);
}
else {
console.log('channel and queue created');
var work = 'Do some work';
channel.sendToQueue(queue, encode(work), {
persistent: true
});
// setImmediate(function() {
// channel.close();
// conn.close();
// });
}
});
function encode(doc) {
return new Buffer(JSON.stringify(doc));
}