#javascript #node.js #express #rabbitmq #backend
#javascript #node.js #экспресс #rabbitmq #серверная часть
Вопрос:
Я хочу разделить мой код подключения RabbitMQ и вызывать его в разных компонентах, чтобы он (соединение и канал) инициализировался только ОДИН РАЗ, и я мог использовать его всякий раз, вместо того, чтобы снова открывать соединение, когда я захочу его использовать.
Что происходит прямо сейчас, так это то, что я вызываю приведенную ниже функцию code снова и снова каждый раз, когда я хочу передать что-то в свой exchange и очередь. (таким образом, если я хочу передать 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;
Ответ №1:
Ответ скопирован отсюда
Это общий вопрос Javascript, а не специфичный для RabbitMQ или библиотеки amqplib.
Я полагаю, вы можете открыть соединение на уровне модуля и использовать его в своем методе passSomeData. Или passSomeData может лениво открыть соединение, если переменная «connection» на уровне модуля равна null, а затем повторно использовать это соединение.
В какой-то момент вам может понадобиться использовать пул соединений, но это зависит от вашего варианта использования и рабочей нагрузки.
ПРИМЕЧАНИЕ: команда RabbitMQ отслеживает rabbitmq-users
список рассылки и только иногда отвечает на вопросы в StackOverflow.