我想拆分RabbitMQ连接代码并在不同的组件之间调用它,以便它(连接和通道)仅初始化ONCE,并且我可以在任何时候使用它,而不必在我想使用它时再次打开连接
现在发生的事情是,每当我想将某些内容传递给交换和队列时,我都会一遍又一遍地调用以下代码。 (因此,如果我想将20个单独的数据传递给RabbitMQ,我最终会打开和关闭连接和通道20次)
有解决方案吗?
const exchange = "Exchange";
const queue = "Queue";
const passSomeData= async payload => {
amqp = require("amqplib").connect("amqp://localhost");
let ch;
let connection;
let publish = amqp
.then(function(conn) {
connection = conn;
return conn.createConfirmChannel();
})
.then(function(chn) {
ch = chn;
ch.assertQueue(queue, { durable: true });
return ch.assertExchange(exchange, "topic", { durable: true });
})
.then(function() {
const data = {
content: "x",
title: "y",
};
ch.bindQueue(queue, exchange, "routingKey");
return ch.publish(exchange, "routingKey", Buffer.from(JSON.stringify(data)), {
persistent: true
});
})
.then(() => {
setTimeout(function() {
connection.close();
}, 250);
});
};
module.exports = passSomeData;
答案 0 :(得分:0)
从here复制的答案
这是一个通用的Javascript问题,并非特定于RabbitMQ或amqplib库。
我相信您可以在模块级别打开一个连接,并在passSomeData方法中使用该连接。或者,如果模块级别的“连接”变量为null,则passSomeData可以延迟打开连接,然后重新使用该连接。
有时候,您可能需要使用连接池,但这取决于您的用例和工作量。
注意: RabbitMQ团队监视rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。